访问及超时验证
您正在阅读旧版文档,新版文档已迁移至 [https://document.pescms.com]
目录
前文再续,书接上回。上一章,我们已经完成了登录验证的接口开发,并且在登陆器中触发正确的帐号密码后,登陆器调用了当前电脑的默认浏览器,访问登录验证接口返回的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')); }
至此,我们已经完成了登陆器所有的登录接口!我相信大家阅读本文档,可以使用本登陆器限制员工在外部网络登录的情况。:)