我正在使用 sanctum 创建 API,并且工作正常我可以列出用户、更新、存储等。
我添加了中间件 auth:sanctum 和传递令牌,并添加了中间件 EnsureFrontendRequestsAreStateful,如文档中所述。
使用无效令牌不起作用,我被重定向到登录。
但是,当验证失败时会发生问题,我正在使用表单请求,但即使在控制器验证中,当失败时我会重定向到家。
我正在使用 Postman 测试 API,如果我禁用“自动跟随重定向”,我可以看到 setTargetUrl 使用的用于重定向的 html 页面,这是:
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="refresh" content="0;url='%1$s'" />
<title>Redirecting to %1$s</title>
</head>
<body>
Redirecting to <a href="%1$s">%1$s</a>.
</body>
</html>
这指向我的家。
我尝试检查从哪里完成此重定向,但无法理解。并且不是通过 RedirectIfAuthenticated。
我希望看到带有错误消息的 JSON 响应。
即使是 Laravel 文档中用于创建令牌的示例代码,如果验证失败,也会有此重定向,此代码:
$request->validate([
'email' => 'required|email',
'password' => 'required',
'device_name' => 'required',
]);
$user = User::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],
]);
}
return $user->createToken($request->device_name)->plainTextToken;
并且仅当验证失败但没有重定向时,所以我认为验证会重定向回来,但由于没有,它会重定向到家。
谢谢
更新
我找到了一种解决方法,但不确定这是否是唯一的方法。
添加一个 try catch 我可以在不重定向的情况下显示验证错误。
try {
$data = $request->validate([
'name' => 'required',
'email' => 'required|email|unique:users,email',
'password' => 'required',
]);
} catch(\Illuminate\Validation\ValidationException $e) {
return response()->json([
'message' => $e->getMessage()
]);
}