ThinkPHP3.0 RBAC示例登录验证失败无法返回登录解决

来源:互联网 发布:最小的刻录软件 编辑:程序博客网 时间:2024/05/18 01:58

原因分析:输入正确账号登录时,系统记录了账号ID,验证失败未清除该账号,导致系统连续验证造成死循环。

解决方案:在CommonAction.class.php(_initialize)加入验证失败时清除当前登录账号代码即可。

if(isset($_SESSION[C('USER_AUTH_KEY')])) {                        unset($_SESSION[C('USER_AUTH_KEY')]);                        unset($_SESSION);                        session_destroy();                    }

修改后代碼如下:

function _initialize() {        import('@.ORG.Util.Cookie');// 用户权限检查if (C ( 'USER_AUTH_ON' ) && !in_array(MODULE_NAME,explode(',',C('NOT_AUTH_MODULE')))) {            import('@.ORG.Util.RBAC');           // dump($_SESSION['_ACCESS_LIST']);if (! RBAC::AccessDecision ()) {//检查认证识别号if (! $_SESSION [C ( 'USER_AUTH_KEY' )]) {if ($this->isAjax()){$this->ajaxReturn(true, "", 301);} else {//跳转到认证网关redirect ( PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );}}                // 没有权限 抛出错误if (C ( 'RBAC_ERROR_PAGE' )) {   // 定义权限错误页面                                redirect ( C ( 'RBAC_ERROR_PAGE' ) );} else {          if (C ( 'GUEST_AUTH_ON' )) {$this->assign ( 'jumpUrl', PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );}// 提示错误信息                    if(isset($_SESSION[C('USER_AUTH_KEY')])) {                        unset($_SESSION[C('USER_AUTH_KEY')]);                        unset($_SESSION);                        session_destroy();                    }$this->error( L ( '_VALID_ACCESS_' ) );}}}}