单设备登录简单实现
单设备登录简单实现
本文编写时间: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 协议》,转载必须注明作者和本文链接
推荐文章: