2017-08-13 69 views
0

我在使用auth组件挣扎。 我的身份验证在插件中进行管理。 在插件的AppController.php我已经建立了这一点:Cakephp 3 - 在会话超时时强制注销

$this->loadComponent('Auth', [ 
            'authenticate'  => [ 'Form' => [ 'userModel' => 'BasUsers' ] ], 
            'loginAction'  => [ 'controller' => 'BasUsers', 'action' => 'login', 'plugin' => 'Basic' ],    
            'userModel'   => 'BasUsers', 
            'loginRedirect'  => '/pages/home', 
            'logoutRedirect' => [ 'controller' => 'BasUsers', 'action' => 'login', 'plugin' => 'Basic' ], 
            'unauthorizedRedirect' => [ 'controller' => 'pages', 'action' => 'not-authorized' ], 
            'authError'   => false, 
            'authorize' => ['Controller'], 
           ] 
         ); 

我不能管理强制注销(重定向到登录页面)当会话过期。

当会话结束时,尝试$ this-> request-> session() - > read('Auth.User.bas_users_role_id')会返回null,但是会执行控制器/操作。

我错过了什么? 谢谢。

+0

支票AUTH允许功能......你可能你允许控制器的所有动作。像$ this-> Auth-> allow(); 。限制/删除它可能会解决您的问题。 – Shashikala

回答

0

1 - 也许你browser retain your credential

2 - 在你Appcontroler尝试使用isAuthorized功能

public function isAuthorized($user) 
{ 
if(is_null($this->request->session()->read('Auth.User.bas_users_role_id') ) : 
    return $this->redirect(
     [ 'controller' => 'BasUsers', 'action' => 'login', 'plugin' => 'Basic' ] 
    ); 
else: 
// your code 
endif; 
} 
+1

我一直在测试,我发现需要在应用程序中使用的每个插件的初始化方法中加载Auth组件,以使其知道谁将进行身份验证(在本例中为Basic插入 )。我不确定这是否是正确的方法,但它的工作原理。 – user1077915