为什么注销后 Auth::check() returns 为真?护照

Why Auth::check() returns true after logout ? Passport

所以我使用护照进行身份验证,一切正常,直到我注销用户。我的路径通过 auth:api 守卫保护,所以在注销后我无法访问任何功能,但是我的前端是通过基于 Auth:check() 值的反应呈现的,并且在注销后它保持真实。因此我可以在没有任何权限的情况下进入管理仪表板,这是一个错误,我找不到修复它的解决方案。

这是我的注销功能:

public function logout()
{
    if (Auth::check()) {
        DB::table('oauth_access_tokens')
            ->where('user_id', Auth::user()->id)
            ->update([
                'revoked' => true
            ]);

        return response(['check' => Auth::check()]); // I get true after logging out
    }

    return response(['check' => Auth::check()]);
}

这是我的登录和注册功能:

public function register(Request $request){
    $validatedData = $request->validate([
        'name' => 'required|max:55|unique:users',
        'password' => 'required'
    ]);
    $validatedData['password'] = bcrypt($request->password);
    $user = User::create($validatedData);
    $accessToken = $user->createToken('authToken')->accessToken;

    return response()

    }

public function login(Request $request)
{
    $loginData = $request->validate([
        'name' => 'required',
        'password' => 'required'
    ]);

    $a = auth()->attempt($loginData, true);
    if(!$a) {
        return response(['message'=>'Invalid credentials');
    }
    $accessToken = auth()->user()->createToken('authToken')->accessToken;
    return response()->json($accessToken);
}

我错过了什么?

Auth::check() returns true 的原因是用户设置在 auth 服务上。您只是在撤销访问令牌,这意味着用户将从下一个请求中注销。

您可以通过以下两种方式解决此问题

1) 假设对 logout 路由的任何调用都会导致用户注销,而不管执行的逻辑如何。例如,您可以进行调用,然后清除前端中的访问令牌(或执行任何其他注销逻辑)。

2) 您可以在代码中调用 Auth::logout(),这会将身份验证服务上的当前用户设置为 null,从而导致 Auth::check() 返回 false