美文网首页
PHP扫码登录

PHP扫码登录

作者: 2d8f44a33137 | 来源:发表于2016-11-29 17:56 被阅读0次

扫码登录具体实现方式

流程图.png

扫码登录具体实现流程:

1、生成二维码,生成一个唯一标识uuid,该标识贯穿整个流程,使用redis保存临时信息

(uuid作为key,对应值设置为-1,-1表示未扫描,该标识的有效期这里设置为三分钟,过期会重新生成一个二维码)。

    public function index(){
        $uuid = self::createRandomStr('6');
        $url = $this->code($uuid); //二维码链接地址
        Redis::sAdd($uuid,'-1');
        Redis::command('Expire',[$uuid,180]);//设置过期时间
        return view('home.send.index',['url'=>$url,'uuid'=>$uuid]);
    }

    /**
     * 生成二维码url
     * @param $text
     */
    public function code($uuid){
        $host='http://'.$_SERVER["HTTP_HOST"].'/api/send';
        $url='http://qr.liantu.com/api.php?text='.$host.'?uuid='.$uuid;
        return $url;
    }
2、登录页面通过一个长连接维持用户请求和服务器之间的通信,每隔一段时间监测redis中 uuid对应的值是否发生改变

(-1未扫描 , 0表示用户已扫描该二维码 ps:再次扫描该二维码时提示已失效, 其余的值表示用户的主键id)

    /**
     * 验证uuid是否过期
     * @param Request $req
     * @return string|void
     */
    public function confirm(Request $req){
        $uuid = $req->uuid;

        $result = implode('',Redis::sort($uuid));
        if($result == ''){//当uuid不存在时表示该标识已失效,重新生成二维码
            return '该链接地址已过期';
        }
        if($result == '-1'){
            return '';
        }elseif($result == '0'){
            return '用户已扫描';
        }else{
            return '用户已确认登录';//获取用户的user_id 直接登录。
        }
    }
3、使用手机扫描二维码(ps:此处应该使用自己开发的App,并且App已经登录)获取唯一标识uuid,判断该标识是否有效 (该标识未失效的情况下修改uuid对应的值为0,用来表示该二维码已被扫描)。
        public function index(Request $req){
              $uuid = $req->uuid;
              $info = Code::getOne(['uuid'=>$uuid]);
              $result = implode('',Redis::sort($uuid));
              if(!$result){
                   return $this->ajaxMsgError('该二维码已失效');
              }
             Redis::sRem($code,'-1');
             Redis::sadd($code ,0);
             return $this->ajaxMsgOk('扫描成功,请确认登录');
    }
4、APP确认登录,把当前uuid对应的val值修改为当前登录用户的主键id
public function dologin(Request $req){
        $user_id = $req->user_id;
        $uuid= $req->uuid;

        $user = User::getOne(['id'=>$user_id]);
        if($user){
            if($user->status != 1){
                return $this->ajaxMsgError('该用户已被禁用');
            }
            Redis::sadd($uuid,$user_id);
            return $this->ajaxSuccess('登录成功');
        }else{
            //用户不存在
            return $this->ajaxError('该用户不存在');
        }
    }
5、重复第二步,此接口如果检查到redis中的key值为登录人UID的时候,就会返回登录人信息并且保存登录态。

相关文章

  • PHP扫码登录

    扫码登录具体实现方式 扫码登录具体实现流程: 1、生成二维码,生成一个唯一标识uuid,该标识贯穿整个流程,使用r...

  • 关于PHP实现扫码登录

    1.实现APP手机登陆后扫码登录PC端 登录的原理 登录的原理无非就是session或者cookie的同步,或者基...

  • php 如何让同台主机的webserver向socket服务器发

    nginx作用于用户的http请求,比如登录,扫码,gateworker是php 的socket框架,用于单向下发...

  • PHP实现微信扫码登录

    AppID和AppSecret。有了这两个东西就可以进行开发了。第一步是显示二维码,这各有两种方式,一种是打开一个...

  • 自动化问题之一 扫码登录如何解决

    常见登录方式是账号密码那么对于扫码登录该如何解决 driver.get("扫码地址") 在请求扫码地址的时候加一行...

  • PC端 UI自动化绕过登录方式

    1、使用场景 登录场景,同时存在账号密码登录和钉钉扫码登录方式,绕过钉钉扫码登录 2、实现思路 先使用账号密码登录...

  • iOS-原生扫码登录

    iOS-原生扫码登录

  • 微信扫码登录原理解析

    扫码登录是现在流行的登录方式,使用这种方式及其方便,而且安全 扫码登录流程 原理 获取唯一的uuid, 以及包含u...

  • 二维码扫码登录

    QRCodeLogin 二维码扫码登录;服务器端、网页端、移动端源码; 项目介绍 一个二维码扫码登录的demo,能...

  • PHP + iOS 实现移动端扫码登录

    前言 最近周末闲着没事,就想建个站玩玩.于是就想起了后台登陆验证的方式是不是可以玩个新花样.比如搞个手机扫码登录验...

网友评论

      本文标题:PHP扫码登录

      本文链接:https://www.haomeiwen.com/subject/feaapttx.html