laravel api 简单做到唯一登陆的办法

给用户模型添加字段

首先,在你的用户模型(如 users)中添加一个 jti 字段来存储最新的 token ID

在login接口添加逻辑

// 更新用户的 jti
$users->jti = $jti;
$users->save();

// 生成 token 并包含 jti
$customClaims = ['jti' => $jti];
if (!$token = auth('storeapi')->claims($customClaims)->fromUser($users)) {
    return response()->json([
        'code'   => 500,
        'msg'    => '登录失败',
        'status' => 0,
        'data'   => (object)[],
    ]);
}

在中间件中添加验证逻辑

try {
            $admin = auth::guard('storeapi')->authenticate($token);

            // 检查 token 是否是最新的
            $tokenJti = JWTAuth::getPayload()->get('jti');
            if ($admin->jti !== $tokenJti) {
                return response()->json([
                    'code' => 403,
                    'msg' => 'token已失效,请在最新设备登录',
                    'status' =>'error',
                    'data'  => (object)[],
                ], 402);
            }
            //addlogsUpUid($logid,['user_id'=> $admin->id]);
        } catch (TokenExpiredException $e) {
            return response ()->json ([
                'code'  => 403,
                'status' => 'error',
                'msg'   => 'token过期',
                'data'  => [],
            ], 402);
        }

总结

在登陆时把token ID 更新上去,然后在中间件去获取 token ID 与字段上的值去比对校验是否一致,如果不一致,token就不是最新的。

本作品采用《CC 协议》,转载必须注明作者和本文链接
Dcat-Admin (plus版)是汇聚Filament,Laravel-admin , Dcat-admin 优点于一身的基于Laravel + Bootstrap 的极速开发框架
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 1

如果用的是sanctum的话,直接删除旧的token,然后再登录,也是可以的

// 删除用户的旧 Token(保证唯一性)
$user->tokens()->delete();
2周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
Dcat-plus Admin @ 速码邦
文章
39
粉丝
56
喜欢
201
收藏
160
排名:388
访问:2.4 万
私信
所有博文
社区赞助商