因此,我使用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
。