单设备登录简单实现

单设备登录简单实现

本文编写时间:2023-06-03

需求

希望实现简单的单设备登录,就是用户在另一台设备上重新登录后,使用原来的设备会提示“你已在另一台设备登录,当前设备已下线”

实现:

这里给出本人手绘流程图的实现思路,都很简单。token既可以用框架生成,也可以自己生成。
通常需要登录才能调用的接口,可以写中间件或控制器的父类初始化代码,逻辑就是图片的右侧内容。
欢迎各种讨论。

代码部分

仅供参考

登录部分代码

 // 查询用户得到 $user_id
$old_token_key = 'old_token'.$user_id;
$new_token_key = 'token'.$user_id;
cache([ $old_token_key => cache( $new_token_key ) ], 86400);
$new_token = create_token($user_id);
cache([ $new_token_key => $new_token ],86400);
return $new_token;

下面是接口中间件代码

// 解密token得到 $user_id
// 如解密失败 ,返回前端错误提示。
$old_token_key = 'old_token'.$user_id;
$new_token_key = 'token'.$user_id;
$token = $request->input('token'); //或者取头部的
if( cahce($old_token_key) && cache($old_token_key) ==$token ){
   echo "您的设备已下线,请重新登录";
   return;
}

if (!cache($new_token_key) ) {
   echo "您长时间未登录,请重新登录";
   return;
}

if ( cache($new_token_key) != $token ) {
   echo "您的设备已下线,请重新登录";
   return;
}
cache([ $new_token_key => $token ],86400);
// 以上是中间件的内容。
// 下面继续做接口该做的功能。

总结

  • 这里的实现没有使用客户端的硬件编码之类的参数,比较简单。
  • 需要前端配合
  • token可以放http的请求参数,也可以放头部,头部更好点。
  • token的创建和解密,既可以用很多框架自带的,也可以自己实现。
  • cache是框架的缓存函数。
  • 86400 是缓存一天的意思。
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 8

你好,单点登录是指,只需一次登录即可访问同主体的多个平台,你说的这个是单设备登录😁😁😁

10个月前 评论

你好,单点登录是指,只需一次登录即可访问同主体的多个平台,你说的这个是单设备登录😁😁😁

10个月前 评论

流程图是什么工具制作的

10个月前 评论
yyy123456 (楼主) 10个月前
php_yt (作者) 10个月前

单点登录和单设备登录不是一回事,兄弟

10个月前 评论

有类似的文章
Laravel 单设备登录
通过 guard()->logoutOtherDevices($password) 实现的,需要用Laravel 自带的 权限认证以及中间件。

10个月前 评论

这个使用websocket也可以实现提示,并强制下线之前访问的用户。

9个月前 评论

可以去看我的例子(https://element.wmhello.cn) 用2个浏览器访问,都使用admin用户,后面的访问的就会使前面访问的页面强制下线。

9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
49
粉丝
7
喜欢
60
收藏
94
排名:592
访问:1.3 万
私信
所有博文
社区赞助商