首页 > php教程 > php手册 > 正文

thinkphp教程之RBAC详解3之登录验证

php中文网
发布: 2016-06-07 11:44:28
原创
1321人浏览过

登录验证部分实例
上一讲我已经说了RBAC的流程,这次通过实际代码来分析。首先讲登录部分,登录无非就是验证用户名密码以及验证码是否正确,我们可以新建一个CommonAction的公共类,用来校验权限,其他所有类继承此类。该类内部写一个初始化方法,用于验证,这一讲先不详细讲解。继续说登录,由于登录是公开模块的方法,所以可以新建一个PublicAction类,用于公共的免验证方法,同时在配置文件中添加'NOT_AUTH_MODULE'        =&gt;        'Public',          //默认不需要认证的模块<br> 'USER_AUTH_GATEWAY'        =&gt;        '/Public/login',//默认的认证网关然后开始编写Public类,具体代码如下:<?php <br /> class PublicAction extends CommonAction{<br><br>     //验证码显示<br>     public function verify(){<br>         import("ORG.Util.Image");<br>         Image::buildImageVerify(4,1,"png",100,28,"verify");        <br>     }<br>     //验证是否账号密码<br>     function checklogin(){<br>         //此处多余可自行改为Model自动验证<br>         if(empty($_POST['username'])) {<br>             $this-&gt;error('帐号错误!');<br>         }elseif (empty($_POST['password'])){<br>             $this-&gt;error('密码必须!');<br>         }elseif (empty($_POST['verify'])){<br>             $this-&gt;error('验证码必须!');<br>         }<br>         $map=array();<br>         $map['username']=$_POST['username'];<br>         $map['status']=array('gt',0);<br>         if($_SESSION['verify'] != md5($_POST['verify'])) {<br>             $this-&gt;error('验证码错误!');<br>         }<br>         <br>         import('ORG.Util.RBAC');<br>         //C('USER_AUTH_MODEL','User');<br>         //验证账号密码<br>          $authInfo=RBAC::authenticate($map);<br>         <br>         if(empty($authInfo)){<br>             $this-&gt;error('账号不存在或者被禁用!');<br>         }else{<br>             if($authInfo['password']!=md5($_POST['password'])){<br>                 $this-&gt;error('账号密码错误!');<br>             }else{<br>                     <br>             $_SESSION[C('USER_AUTH_KEY')]=$authInfo['id'];//记录认证标记,必须有。其他信息根据情况取用。<br>             $_SESSION['email']=$authInfo['email'];<br>             $_SESSION['nickname']=$authInfo['nickname'];<br>             $_SESSION['user']=$authInfo['username'];<br>             $_SESSION['last_login_date']=$authInfo['last_login_date'];<br>             $_SESSION['last_login_ip']=$authInfo['last_login_ip'];<br>             //判断是否为超级管理员<br>             if($authInfo['username']=='admin'){<br>                 $_SESSION[C('ADMIN_AUTH_KEY')]=true;<br>             }<br>            //以下操作为记录本次登录信息<br>             $user=M('User');<br>             $lastdate=date('Y-m-d H:i:s');<br>             $data=array();<br>             $data['id']=$authInfo['id'];<br>             $data['last_login_date']=$lastdate;<br>             $data['last_login_ip']=$_SERVER["REMOTE_ADDR"];<br>             $user-&gt;save($data);<br>             RBAC::saveAccessList();//用于检测用户权限的方法,并保存到Session中<br>             $this-&gt;assign('jumpUrl',.'/Index/index');<br>             $this-&gt;success('登录成功!');<br>             }<br>         }<br>     }<br>     //退出登录操作<br>     function logout(){<br>         if(!empty($_SESSION[C('USER_AUTH_KEY')])){<br>             unset($_SESSION[C('USER_AUTH_KEY')]);<br>             $_SESSION=array();<br>             session_destroy();<br>             $this-&gt;assign('jumpUrl',/Code.'/login');<br>             $this-&gt;success('登出成功');<br>         }else{<br>             $this-&gt;error('已经登出了');<br>         }<br>     }<br><br>     <br> }以上代码仅实现功能,没有做优化,有些验证的操作可以放到model,session也不用一 一赋值,用数组即可,我想已经入门的应该可以自己改的更好。

AD:真正免费,域名+虚机+企业邮箱=0元

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号