ThinkPHP3.0 RBAC示例登錄驗證失敗無法返回登錄解決

原因分析:輸入正確賬號登錄時,系統記錄了賬號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_' ) );
				}
			}
		}
	}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章