我正在为我的 API 使用 Laravel sanctum。
如何检查用户是否通过 sanctum 中间件的身份验证但没有重定向?我想检查他是否经过身份验证,然后做一些事情,如果没有,则做其他事情,而不重定向或发送“未经身份验证”的消息。
有没有办法直接用 sanctum 做,或者我必须手动检查令牌及其过期时间?
只需从here获取此功能,将其粘贴到您的“app/Exceptions/Handler.php”中并根据需要覆盖。
/**
* Convert an authentication exception into a response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Symfony\Component\HttpFoundation\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
// CUSTOMIZE THE BODY AS YOU WANT..
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest($exception->redirectTo() ?? route('login'));
}
我在这里遇到同样的问题是解决这个问题的方法,
use Illuminate\Auth\AuthenticationException;
public function register()
{
$this->renderable(function (AuthenticationException $e, $request) {
if ($request->is('api/*')) {
return response()->json([
'status_code' => 401,
'success' => false,
'message' => 'Unauthenticated.'
], 401);
}
});
}
您还可以在 app/Exceptions/Handler.php 上使用渲染函数来实现它:
use Throwable;
use Illuminate\Auth\AuthenticationException;
public function render($request, Throwable $e) {
if ($e instanceof AuthenticationException) {
return response()->json([...], 403);
}
}