单设备登录逻辑
- 登录的时候根据uid生成token,分别以uid和token值为键值保存在缓存内
- 每次调用接口的时header带上uid和token值 ,服务端第一步先验证token是否存在,不存在则提示过期;存在且和传过来的值不一致则提示其他设备登录;
- token验证通过的时候调用token延长过期时间方法,删除老的token重新写入过期时间,避免3600秒后必定过期的问题,这样只要前端有和服务端交互就能保证都是在最后一次交互后3600秒过期token
<?php
/**
* 作者:braver.wang
* 时间:2021/4/27 17:18
*/
namespace app\v1\common;
use think\facade\Cache;
class tokenLogic
{
// 生成token
public static function createToken($uid){
$tokenname = 'token-'.$uid;
$nowtime = time();
$token = strtoupper(md5(md5($nowtime)));
Cache::set($tokenname,$token,3600);
Cache::set($token,$uid,3600);
return $token;
}
// 清除全部token
public static function clearall(){
return Cache::clear();
}
// 根据uid清除指定token
public static function clearToken($uid){
$tokenstr = tokenLogic::getTokenByUid($uid);
$tokenname = 'token-'.$uid;
Cache::rm($tokenname);
return Cache::rm($tokenstr);
}
// 获取token
public static function getTokenByUid($uid){
$tokenname = 'token-'.$uid;
return Cache::get($tokenname);
}
public static function getUidByToken($token){
return Cache::get($token);
}
// 获取空token
public static function getEmptyToken(){
$nowtime = time();
return strtoupper(md5(md5($nowtime)));
}
// 延长token过期时间避免必定过期
public static function extendTokenTime($uid){
// 获取老的token
$oldtoken = tokenLogic::getTokenByUid($uid);
$tokenname = 'token-'.$uid;
// 清除token
tokenLogic::clearToken($uid);
// 重新写token
Cache::set($tokenname,$oldtoken,3600);
Cache::set($oldtoken,$uid,3600);
}
}