我在用拉瑞维尔圣所做我的API。我如何检查用户是否通过了sancutum中间件的身份验证,但没有重定向?我想检查他是否通过了身份验证,然后做一些事情,如果没有,然后做别的事情,没有重定向或发送“未通过身份验证”的消息。有没有一种方法可以直接用sancutum来做,或者我必须手动检查令牌和它的到期时间?
yvgpqqbh1#
只需从这里抓取这个函数,将其粘贴到**“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')); }
8wigbo562#
我也遇到了同样的问题这里是解决这个问题的方法,1.向API请求添加“Accept”标头,并将值设置为“application/json”1.如下所示替换App\Exceptions\Handler中的register方法
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); } }); }
nc1teljy3#
你也可以使用app/Exceptions/Handler.php上的渲染函数来实现:
use Throwable; use Illuminate\Auth\AuthenticationException; public function render($request, Throwable $e) { if ($e instanceof AuthenticationException) { return response()->json([...], 403); } }
3条答案
按热度按时间yvgpqqbh1#
只需从这里抓取这个函数,将其粘贴到**“app/Exceptions/Handler.php”**中,然后根据需要覆盖。
8wigbo562#
我也遇到了同样的问题这里是解决这个问题的方法,
1.向API请求添加“Accept”标头,并将值设置为“application/json”
1.如下所示替换App\Exceptions\Handler中的register方法
nc1teljy3#
你也可以使用app/Exceptions/Handler.php上的渲染函数来实现: