访问及超时验证

目录

前文再续,书接上回。上一章,我们已经完成了登录验证的接口开发,并且在登陆器中触发正确的帐号密码后,登陆器调用了当前电脑的默认浏览器,访问登录验证接口返回的URL:http://login.pescms.com/?g=Admin&m=Login&a=doLogin&mark=$kjlh.jklhsauyhjg213jh (仅为示例)。

用户通过浏览器访问指定的URL后,我们对应的网站端需要编写一个接收接口,用于判别该URL是否为登陆器中生成的信息。如下示例代码(位于服务端中的App/Admin/GET/Login.class.php 中约 37行的 dologin() 方法):

    public function dologin(){
        $mark = $this->isG('mark', '非法请求'); //登陆器生成的URL中,mark是之前登录验证接口协定的参数。大家可以按照自己的实际情况更改。
        
        $check = \Model\Content::findContent('dologin', $mark, 'dologin_mark');//验证mark参数是否与之前登录验证接口生成并记录数据库的信息一致
        
        if(empty($check)){
            $this->error('不存在的记录');
        }
        
        /**
         * 请求过来的mark如果已经使用了,那么数据库中的dologin_status将会设置为1.
         * 考虑到mark是弱验证(HTTP短链接的特性),当登陆器接口触发浏览器访问时,聪明点的人可以将该地址发给别人,让他人访问。
         * 我们加上了30秒的验证,可以防止大部分的小白用户和上面别有用心的人。让他们的做法成功几率降低。
         * PS:如果需要真正的强验证功能,请自行研究TCP之类的网络协议实现。也可以联系PESCMS开发人员,选择定制计划。
         */
        if($check['dologin_createtime'] <= time() - 30 && $check['dologin_status'] == '0'){
            $this->error('登录超时,请重新运行软件');
        }
        
        //一切都验证通过,则处理登录,赋上对应的登录信息。
        $this->db('dologin')->where('dologin_id = :dologin_id')->update(array('dologin_status' => '1', 'noset' => array('dologin_id' => $check['dologin_id'])));
        
        $_SESSION['admin'] = json_decode($check['dologin_session'], true); 
        
        $this->success('登录成功!', $this->url(GROUP . '-Index-index'));
        
    }

至此,我们已经完成了登陆器所有的登录接口!我相信大家阅读本文档,可以使用本登陆器限制员工在外部网络登录的情况。:) 

PESCMS DOC 文档系统
© Copyright 2015-2020. by the PESCMS DOC
耗时0.0229秒