发出访问和刷新令牌时,我将它们发送到前端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');
有谁知道如何处理这个用例?