为什么Auth :: check()注销后返回true?护照

时间:2019-07-27 23:35:52

标签: laravel laravel-passport

因此,我使用护照进行了身份验证,在我注销用户之前,一切工作正常。我的路径受rm -rf ~/Library/Developer/Xcode/DerivedData 保护,因此注销后我无法访问任何功能,但是我的前端是通过基于Auth:check()值的react呈现的,注销后仍然为true。因此,我可以在没有任何权限的情况下进入管理仪表板,这是一个错误,并且找不到解决此问题的解决方案。

这是我的注销功能:

auth:api

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

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()]);
}

我错过了什么?

1 个答案:

答案 0 :(得分:1)

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

您可以解决以下两种方法之一

1)假定对logout路由的任何调用都将导致用户注销,而与执行的逻辑无关。例如,您可以拨打电话,然后清除前端中的访问令牌(或执行其他任何注销逻辑)。

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