Laravel Sanctum检查用户是否有令牌



我试图登录用户,如果这个用户在personal_access_tokens表中有任何令牌,则删除它们并创建一个新的。我试过了,但这给了我一个错误说Call to a member function currentAccessToken() on null

这是我在登录方法中使用的代码,

$request->validate([
'email'    => 'required | email',
'password' => 'required'
]);

$user = User::where('email', $request->email)->first();
if (!$user){
return response(['payback' => 'Account not found']);
} else if(!Hash::check($request->password, $user->password)){
return response(['payback' => 'Incorrect Credentials']);
}
if($request->user()->currentAccessToken()){
$request->user()->currentAccessToken()->delete();
} else {
return response(['payback' => 'Not Has Tokens']);
}
$token = $user->createToken('ribluma_access_token')->plainTextToken;

我尝试了一个解决方案,

$request->validate([
'email'    => 'required | email',
'password' => 'required'
]);

$user = User::where('email', $request->email)->first();
if (!$user) {
return response(['payback' => 'Account not found']);
} else if (!Hash::check($request->password, $user->password)) {
return response(['payback' => 'Incorrect Credentials']);
}
if (count(DB::table('personal_access_tokens')->where('tokenable_id', $user->id)->get()) > 0) {
DB::table('personal_access_tokens')->where('tokenable_id', $user->id)->delete();
}
$token = $user->createToken('ribluma_access_token')->plainTextToken;
$response = [
'user'  => $user,
'token' => $token
];
return $response;

这正是我想做的事。但我想应该有更好的办法。如果有人能帮上忙,我将不胜感激。

if(auth('sanctum')->check()){
auth()->user()->tokens()->delete();
}
$token = $user->createToken('ribluma_access_token')->plainTextToken;

尝试此代码登录

$request->validate([
'email'    => 'required | email',
'password' => 'required'
]);

$user = User::where('email', $request->email)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
return response(
'message' => ['These credentials do not match our records.']
,404);
}
if(auth('sanctum')->check()){
auth()->user()->tokens()->delete();
}
$token = $user->createToken('ribluma_access_token')->plainTextToken;

Laravel更新>= 7:

// Revoke the token that was used to authenticate the current request...
$request->user()->currentAccessToken()->delete();
// Revoke a specific token...
$user->tokens()->where('id', $tokenId)->delete();

相关内容

最新更新