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



因此,我使用Passport进行了身份验证,一切正常,直到我登录用户为止。我的路径通过auth:api护罩进行保护,因此登录后,我无法访问任何功能,但是我的前端是通过基于auth:check((值的React渲染的,并且在登录后它保持真实。因此,我能够没有任何权限进入管理仪表板,这是一个错误,我找不到解决方案的解决方案。

这是我的注销函数:

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()返回true的原因是用户设置在身份验证服务上。您仅撤销访问令牌,这意味着将从下一个请求中记录用户。

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

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

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

最新更新