请教个关于token重复获取的问题

    public function login(Request $request)
    {
        $name = $request->input('name');
        $password = $request->input('password');

        // 验证用户

        $user = User::where('name',$name);

        // 创建token

        // 缓存token


        return ['token' => 'xxxx'];
    }

大佬们,我的token是存redis中,但是这个接口可以不停的被刷新访问,就相当于可以重复登录,如何防用户重复登录呢?

  • 给这个加个中间件,限制IP?
  • redis key 设为 userID,每次判断key是否存在?

大佬们有没有好方法

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

其實不用做限制也可以,正常用戶應該不會不斷 call login 的 api

或者你可以login 後提示用戶有其他設備登錄了

問他要不要登出其他設備

$user = auth()->user();

$user->tokens->each(function ($token) use ($request) {
    if (! $request->user()->token()->is($token)) {
        $token->delete();
    }
});
1年前 评论
浪里小白龙 (楼主) 1年前
浪里小白龙 (楼主) 1年前
jack_f (作者) 1年前
jack_f (作者) 1年前
浪里小白龙 (楼主) 1年前
讨论数量: 11

其實不用做限制也可以,正常用戶應該不會不斷 call login 的 api

或者你可以login 後提示用戶有其他設備登錄了

問他要不要登出其他設備

$user = auth()->user();

$user->tokens->each(function ($token) use ($request) {
    if (! $request->user()->token()->is($token)) {
        $token->delete();
    }
});
1年前 评论
浪里小白龙 (楼主) 1年前
浪里小白龙 (楼主) 1年前
jack_f (作者) 1年前
jack_f (作者) 1年前
浪里小白龙 (楼主) 1年前

redis key 设为 userID, 每次判断 key 是否存在?

这种方式有什么不好的吗?

1年前 评论

用户已经登陆了 为什么还要让他访问登陆接口呢?如果必须这样,setnx,userid为key,登陆成功重写过期时间,我没有操作过能不能重写过期时间,你可以试试

1年前 评论

加个黑名单就行了

1年前 评论

你这业务就有问题,已经登录还访问登录接口做什么呢?

1年前 评论
ncccc1 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!