0

发出访问和刷新令牌时,我将它们发送到前端httpOnly = true。我创建了一个中间件类,它检查访问令牌是否已过期以及刷新令牌是否尚未过期。如果两者都是这种情况,我将使用 refresh_token 作为 grant_type 调用 oauth/token 路由。

所有这些都有效,但是我不确定如何在控制器中使用经过身份验证的用户。现在我已经设置了中间件,当有响应时它会发送新的访问和刷新令牌。

class RefreshAccessToken
{
    /* @var AuthController $authController */
    private $authController;

    /**
     * RefreshAccessToken constructor.
     *
     * @param AuthController $authController
     */
    public function __construct(AuthController $authController)
    {
        $this->authController = $authController;
    }

    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure                 $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // User already has an access token
        if ($request->hasCookie('access_token')) {
            return $next($request);
        }

        // User doesn't have an access token and doesn't have a refresh token.
        if (!$request->hasCookie('refresh_token')) {
            return $next($request);
        }

        $response = $next($request);

        $cookies = $this->authController->refreshToken($request);

        return $response
            ->cookie($cookies['access_token'])
            ->cookie($cookies['refresh_token']);
    }
}

现在在控制器内部,如果我想访问已登录的用户,我总是得到 null 作为响应:

public function logout()
    {
        dd(auth()->user());
    }
}

在控制器的构造方法内部:

$this->middleware('auth:api')->only('logout');

有谁知道如何处理这个用例?

4

0 回答 0