为什么注销后 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
。
所以我使用护照进行身份验证,一切正常,直到我注销用户。我的路径通过 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
。