成功登录用户后,Cakephp3立即重定向回登录页面

成功登录用户后,Cakephp3立即重定向回登录页面,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,我在cake php3中有一个小应用程序,它有一个前端和一个管理后端。我试图保护管理员后端中的控制器,以便在用户继续操作之前要求进行身份验证,但在遵循cakephp3上的教程后,我发现$this->Auth->user()返回null,用户立即重定向回登录页面 我在/src/Controller/Admin/userscocontroller.php中的登录函数 public function login() { if ($this->request->is ( 'post

我在cake php3中有一个小应用程序,它有一个前端和一个管理后端。我试图保护管理员后端中的控制器,以便在用户继续操作之前要求进行身份验证,但在遵循cakephp3上的教程后,我发现$this->Auth->user()返回null,用户立即重定向回登录页面

我在/src/Controller/Admin/userscocontroller.php中的登录函数

public function login() {
     if ($this->request->is ( 'post' )) {
        $user = $this->Auth->identify ();
        if ($user) {
                die(var_dump($user));// returns the user details correctly
                $this->Auth->setUser ( $user );             
                return $this->redirect($this->Auth->redirectUrl()); 
        }            
        $this->Flash->error ( __ ( 'Invalid username or password, try again' ) );

     }          
}



public function beforeFilter(Event $event) {
    parent::beforeFilter ( $event );
    $this->Auth->allow ( [  'logout'    ] );
}
在我的路线上我有

 Router::prefix ( 'admin', function ($routes) {
$routes->connect ( '/', [ 
        'controller' => 'Admin',
        'action' => 'dashboard' 
]);
$routes->connect ( '/pages/*', [
        'controller' => 'Admin',
        'action' => 'dashboard'
] );

$routes->fallbacks ( 'InflectedRoute' );
})

在我的APPController中,我有这个

public function initialize() {
    $this->loadComponent ( 'Flash' );
    // $this->loadComponent('Auth');
    $this->loadComponent ( 'Auth', [ 
            'authorize' => ['Controller'], // Added this line
            'loginRedirect' => [ 
                    'controller' => 'Admin',
                    'action' => 'dashboard' 
            ],
            'logoutRedirect' => [ 
                    'controller' => 'Users',
                    'action' => 'login' 
            ],
            'authenticate'=> [
            'Form' => [
                    'fields' => [
                            'username' => 'email',
                            'password' => 'password'
                    ]
                    ]
                ]
    ] );


}
public function beforeFilter(Event $event) {

    if ((isset ( $this->request->prefix ) && ($this->request->prefix === 'admin'))) {
        $this->layout = 'admin';
    }


    //exit(var_dump($this->Auth->user()));

    if ($this->request->prefix !== 'admin') {
        $this->Auth->allow (); //allow all other parts of the site to work
    }



}

public function isAuthorized($user) {

    if (isset ( $user ['role'] ) && $user ['role'] === 'admin') {
        return true;
    }

    // Default deny
    return false;
}
在我的/src/COntroller/Admin/AdminController.php中,我有这个

    public function beforeFilter(Event $event) {
    parent::beforeFilter ( $event );

}

public function index() {

    return $this -> render('TestView/index');

}

public function dashboard(){

}

我得到的任何帮助都将受到感激。我已经上网搜索了好几天了。我是cakephp新手,但我相信我一定做错了什么。如果需要,我可以对代码提供更多的见解。提前感谢。

您是如何在数据库中存储密码的?它们需要以特定的方式散列,以便Cake能够对用户进行身份验证。请参阅。我在cake php文档中使用普通哈希方法存储了密码。凭据正常工作。当我尝试无效的凭证时,会收到“无效用户名/密码”消息。但是当我尝试有效的方法时,它会重定向回登录页面,不显示任何消息。如果您更改
isAuthorized
方法,则会发生什么情况,因此它总是返回
true
?该方法永远不会被调用!您似乎只允许通过
$this->Auth->allow
注销,请尝试将
登录
添加到其中。您是如何在数据库中存储密码的?它们需要以特定的方式散列,以便Cake能够对用户进行身份验证。请参阅。我在cake php文档中使用普通哈希方法存储了密码。凭据正常工作。当我尝试无效的凭证时,会收到“无效用户名/密码”消息。但是当我尝试有效的方法时,它会重定向回登录页面,不显示任何消息。如果您更改
isAuthorized
方法,则会发生什么情况,因此它总是返回
true
?该方法永远不会被调用!您似乎只允许通过
$this->Auth->allow
注销,请尝试将
登录
添加到其中