[英]Laravel Sanctum check if user has tokens
我正在嘗試登錄用戶,如果此用戶在 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;
這正是我想做的事情。 但我猜應該有更好的方法。 如果有人可以提供幫助,真的很感激。
試試這個代碼登錄
$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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.