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

问题描述 投票:0回答:3

我正在为我的 API 使用 Laravel sanctum。

如何检查用户是否通过 sanctum 中间件的身份验证但没有重定向?我想检查他是否经过身份验证,然后做一些事情,如果没有,则做其他事情,而不重定向或发送“未经身份验证”的消息。

有没有办法直接用 sanctum 做,或者我必须手动检查令牌及其过期时间?

laravel authentication api-design laravel-sanctum
3个回答
0
投票

只需从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'));
}

0
投票

我在这里遇到同样的问题是解决这个问题的方法,

  1. 将“Accept”标头添加到API请求并将值设置为“application/json”
  2. 像这样替换 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);
    }
   });
}

0
投票

您还可以在 app/Exceptions/Handler.php 上使用渲染函数来实现它:

use Throwable;
use Illuminate\Auth\AuthenticationException;


    public function render($request, Throwable $e) {

        if ($e instanceof AuthenticationException) {
            return response()->json([...], 403);
        }
    }


© www.soinside.com 2019 - 2024. All rights reserved.