【问题标题】:Laravel Sanctum check if user has tokensLaravel Sanctum 检查用户是否有令牌
【发布时间】: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


【解决方案1】:

试试这个代码登录

$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;

【讨论】:

  • 未定义的方法标记()
  • 尝试 auth()->logout();
【解决方案2】:
    if(auth('sanctum')->check()){
        auth()->user()->tokens()->delete();
    }

    $token = $user->createToken('authToken')->plainTextToken;

  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 2021-07-02
    • 2020-07-04
    • 2020-06-05
    • 1970-01-01
    • 2021-09-24
    • 2023-03-27
    相关资源
    最近更新 更多