提供一种通用的设计
后端只需提供3个接口,分别是 getUuid,isLogin,loginByQrcode
第一步
pc端切换到二维码扫码界面时,请求getUuid接口, getUuid接口生成一个uuid,存入到redis中,可设置过期时间1
2
3// 伪代码
$uuid = uniqid();
redis->set($uuid, 'login', 60 * 5)
第二步
PC前端一直轮询isLogin接口,isLogin接口判断uuid是否过期,判断是否uuid是否还未被二维码扫码,判断uuid的值是否已经跟token关联1
2
3
4
5
6
7
8
9
10
11
12
13
14// 伪代码
$uuid = input('uuid');
if (empty($uuid)) {
return '参数错误';
}
$token = redis->get($uuid);
if (empty($token)) {
return '二维码超时';
}
if ($token == 'login') {
return '手机还未扫码';
}
return $token
第三步
手机端已登录情况下扫码,获取到二维码的信息,即uuid,然后通过loginByQrcode接口,把token跟uuid信息关联到redis中1
2
3
4
5
6
7
8
9
10
11// 伪代码
$uuid = input('uuid');
$token = input('token');
$uuid = redis->has($uuid);
if (empty($uuid)) {
return '二维码过期,请刷新页面';
}
// 获取用户信息
redis->set($uuid, $token, 60 * 5)