【发布时间】:2022-10-20 16:26:31
【问题描述】:
我正在尝试登录用户,如果此用户在 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;
这正是我想做的事情。但我猜应该有更好的方法。如果有人可以提供帮助,真的很感激。
【问题讨论】:
-
在这里使用 $user 变量 $user->currentAccessToken()
-
@BhargavRangani 我这样使用 if($user->currentAccessToken()){ return response(['payback' => 'Has Tokens']); } ,但不工作
标签: laravel laravel-sanctum laravel-api