【问题标题】:Cakephp 3 - force logout on session timeoutCakephp 3 - 会话超时强制注销
【发布时间】:2017-08-13 15:23:52
【问题描述】:

我正在努力使用身份验证组件。 我的身份验证在插件内部进行管理。 在插件的 AppController.php 中我设置了这个:

    $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,但执行控制器/动作。

我错过了什么? 谢谢。

【问题讨论】:

  • 检查授权允许功能...您可能允许控制器中的所有操作。像 $this->Auth->allow(); .restricting/removing 它可能会解决您的问题。

标签: session authentication cakephp logout


【解决方案1】:

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;
}

【讨论】:

  • 我一直在测试,我发现需要在应用程序中使用的每个插件的初始化方法中加载 Auth 组件,以便让它知道谁来做身份验证(在本例中为 Basic 插件)。我不确定这是否是正确的方法,但它有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 2012-05-11
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多