Laravel sancutum检查用户是否已通过身份验证而无需重定向

dkqlctbz  于 2023-03-04  发布在  其他
关注(0)|答案(3)|浏览(113)

我在用拉瑞维尔圣所做我的API。
我如何检查用户是否通过了sancutum中间件的身份验证,但没有重定向?我想检查他是否通过了身份验证,然后做一些事情,如果没有,然后做别的事情,没有重定向或发送“未通过身份验证”的消息。
有没有一种方法可以直接用sancutum来做,或者我必须手动检查令牌和它的到期时间?

yvgpqqbh

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'));
}
8wigbo56

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);
    }
   });
}
nc1teljy

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);
        }
    }

相关问题