Sanctum 表单请求验证失败重定向到主页
Sanctum form request validation on fail redirect to home
我正在使用 sanctum 创建 API,并且工作正常我可以列出用户、更新、存储等。
我添加了中间件 auth:sanctum 并传递了令牌,并且我添加了中间件 EnsureFrontendRequestsAreStateful,就像文档中解释的那样。
使用无效令牌无效,我被重定向到登录。
但是,当验证失败时会出现问题,我正在使用表单请求,但即使在控制器中进行验证,当失败时我也会重定向到主页。
我正在使用 Postman 进行测试 API,如果我禁用“自动跟随重定向”,我可以看到 html setTargetUrl 使用的重定向页面,这:
<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()
]);
}
您可能希望将 Accept
header 作为 application/json
发送,以便服务器知道您正在接受 JSON 返回。这是异常处理程序如何确定如何 return 来自验证异常的响应的一部分。
我正在使用 sanctum 创建 API,并且工作正常我可以列出用户、更新、存储等。
我添加了中间件 auth:sanctum 并传递了令牌,并且我添加了中间件 EnsureFrontendRequestsAreStateful,就像文档中解释的那样。
使用无效令牌无效,我被重定向到登录。
但是,当验证失败时会出现问题,我正在使用表单请求,但即使在控制器中进行验证,当失败时我也会重定向到主页。
我正在使用 Postman 进行测试 API,如果我禁用“自动跟随重定向”,我可以看到 html setTargetUrl 使用的重定向页面,这:
<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()
]);
}
您可能希望将 Accept
header 作为 application/json
发送,以便服务器知道您正在接受 JSON 返回。这是异常处理程序如何确定如何 return 来自验证异常的响应的一部分。