首页 > 解决方案 > 如何在 Laravel Passport 中检查身份验证状态?

问题描述

我正在尝试使用 Passport auth 检查 Laravel 中的用户身份验证状态。这是我正在尝试的:

api.php

Route::post('/check-auth-status', 'LoginController@checkUserAuthStatus')->middleware('auth:api');

登录控制器

public function checkUserAuthStatus(Request $request)
{
  if($request->user() !== auth()->user())
  return response()->json('Unauthorized user',401);
}

这里的问题是当用户退出时 url 没有命中,因为middleware('auth:api')in 路由,所以它向应用程序发送了未经授权的消息。此外,Auth::check() 不起作用(总是返回 false)。

在这里做什么?还是有更好的主意?提前致谢 !

标签: laravellaravel-7laravel-passport

解决方案


就像您的代码一样,它不会像您使用中间件一样工作,所以如果不是 auth 它不会进入checkUserAuthStatus它会重定向到登录页面

你需要处理这个Handler.php

将此功能添加到Handler.php

use Illuminate\Auth\AuthenticationException;


protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson()
        ? response()->json('Unauthorized user',401)
        : redirect('/login');
}

$request->expectsJson()意味着如果请求headeraccept:application/json,那么它将返回带有您的自定义消息的 json 响应Unauthorized user


推荐阅读