首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel Sanctum检查用户是否有令牌

Laravel Sanctum检查用户是否有令牌
EN

Stack Overflow用户
提问于 2022-07-16 12:24:02
回答 2查看 1.6K关注 0票数 2

我正在尝试登录用户,如果这个用户在personal_access_tokens表中有任何令牌,请删除它们并创建一个新的令牌。我试过了,但是这会让我在说Call to a member function currentAccessToken() on null时出错

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

代码语言:javascript
运行
复制
$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;

我尝试了一个可行的解决方案,

代码语言:javascript
运行
复制
        $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;

这正是我想做的。但我想应该有更好的办法。如果有人能帮忙谢谢你我真的很感激。

EN

回答 2

Stack Overflow用户

发布于 2022-10-20 08:26:31

代码语言:javascript
运行
复制
    if(auth('sanctum')->check()){
        auth()->user()->tokens()->delete();
    }

    $token = $user->createToken('ribluma_access_token')->plainTextToken;
票数 1
EN

Stack Overflow用户

发布于 2022-07-16 12:38:34

尝试使用以下代码来登录

代码语言:javascript
运行
复制
$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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73004177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档