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

8 篇文章 0 订阅
1 篇文章 0 订阅

原因分析:输入正确账号登录时,系统记录了账号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_' ) );
				}
			}
		}
	}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值