Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP登录不工作_Php_Cakephp - Fatal编程技术网

CakePHP登录不工作

CakePHP登录不工作,php,cakephp,Php,Cakephp,我想要什么: 当用户未登录并尝试通过任何url访问站点时,他们会被重定向到/landing(该url上有一个表单可发布到/login) 发生了什么: 当用户未登录并尝试通过任何url访问站点时,他们会被重定向到/login 在我的AppController中,我有: public $components = array( 'Auth' => array( ... 'loginRedirect' => array('co

我想要什么:
当用户未登录并尝试通过任何url访问站点时,他们会被重定向到/landing(该url上有一个表单可发布到/login)

发生了什么:
当用户未登录并尝试通过任何url访问站点时,他们会被重定向到/login


在我的AppController中,我有:

public $components = array(
        'Auth' => array(
            ...
            'loginRedirect' => array('controller' => 'twitter', 'action' => 'index'),
            'loginAction' => '/landing',
            'logoutRedirect' => '/landing',
            'unauthorizedRedirect' => '/landing',
            'authorize' => array('Actions' => array('actionPath' => 'controllers'))
        ));

        public function beforeFilter() {
            $this->Auth->allow('login', 'landing');
        }
我原以为
'loginAction'=>'/landing'
会是解决方案,但没有帮助


有什么想法吗?

您缺少控制器了吗

'Auth' => array(
            'loginRedirect' => array(
                'controller' => 'items',
                'action' => 'index'
            ),
            'logoutRedirect' => array(
                'controller' => 'users',
                'action' => 'login'
            ),
            'authenticate' => array(
                'Form' => array(
                    'passwordHasher' => 'Blowfish'
                )
            )
        )

你找不到控制器了

'Auth' => array(
            'loginRedirect' => array(
                'controller' => 'items',
                'action' => 'index'
            ),
            'logoutRedirect' => array(
                'controller' => 'users',
                'action' => 'login'
            ),
            'authenticate' => array(
                'Form' => array(
                    'passwordHasher' => 'Blowfish'
                )
            )
        )

从您的代码片段来看,您似乎正在将
$this->Auth->allow()
规则放入
AppController
beforeFilter()方法中:

public function beforeFilter() {
    $this->Auth->allow('login', 'landing');
}
问题在于,由于您的
/landing
路由指向您的
页面
控制器,而
/login
指向您的
用户
控制器,除非您的控制器的
beforeFilter()
方法调用其父方法如下:

public function beforeFilter() {
    parent::beforeFilter();
}
这些规则永远不会采取行动。如果您在上面添加此代码,实际上您允许两个控制器中的
登陆
登录
方法(如果存在)

现在的情况是,父对象(显然)从未被调用,因此当您访问像
/bogus
这样的url时,您会被重定向到
/landing
,正如您在
AuthComponent
登录操作中设置的那样。但由于在
页面
controller
beforeFilter()
中从未明确允许这样做,因此您会再次被重定向到
/login
。整个过程看起来就像你总是被重定向到
/login
,无论你访问哪个url

请记住,您现有的
allow()
登录规则既不执行也不执行。不过,您可以访问
/login
,因为cake会自动允许它(否则您将陷入无休止的循环)

因此,首先从
allow()
中删除
landing
规则。你不需要它

然后将
beforeFilter()
代码移动到
页面
控制器。将
landing
更改为
display
,因为在该控制器内调用的方法是
display
,并传递参数
landing
。那里没有
登陆
方法(我假设-如果有,路由指向
页面
显示
,因此不会有任何效果)


最后一个更改将使
显示作为参数传递的任何给定页面所允许的
操作(如
登录
主页
eula
或您可能拥有的任何其他内容)。如果您不想在
beforeFilter()
display()
中添加检查,并且仅当参数是
landing

时,才允许请求继续从您的代码段中添加
$this->Auth->allow()
规则
AppController的方法

public function beforeFilter() {
    $this->Auth->allow('login', 'landing');
}
问题在于,由于您的
/landing
路由指向您的
页面
控制器,而
/login
指向您的
用户
控制器,除非您的控制器的
beforeFilter()
方法调用其父方法如下:

public function beforeFilter() {
    parent::beforeFilter();
}
这些规则永远不会采取行动。如果您在上面添加此代码,实际上您允许两个控制器中的
登陆
登录
方法(如果存在)

现在的情况是,父对象(显然)从未被调用,因此当您访问像
/bogus
这样的url时,您会被重定向到
/landing
,正如您在
AuthComponent
登录操作中设置的那样。但由于在
页面
controller
beforeFilter()
中从未明确允许这样做,因此您会再次被重定向到
/login
。整个过程看起来就像你总是被重定向到
/login
,无论你访问哪个url

请记住,您现有的
allow()
登录规则既不执行也不执行。不过,您可以访问
/login
,因为cake会自动允许它(否则您将陷入无休止的循环)

因此,首先从
allow()
中删除
landing
规则。你不需要它

然后将
beforeFilter()
代码移动到
页面
控制器。将
landing
更改为
display
,因为在该控制器内调用的方法是
display
,并传递参数
landing
。那里没有
登陆
方法(我假设-如果有,路由指向
页面
显示
,因此不会有任何效果)


最后一个更改将使
显示作为参数传递的任何给定页面所允许的
操作(如
登录
主页
eula
或您可能拥有的任何其他内容)。如果您不想在
beforeFilter()
display()
中添加检查,并且仅当参数为
landing

时才允许请求继续,您只允许用户访问beforeFilter中的“login”页面,尝试添加“landing”到我已经添加的页面,忘记将其添加到代码段中。现在更新了
/landing
/login
的路径分别指向哪里?/landing is/pages/display/landing/登录名为/users/login您只允许用户访问beforeFilter中的“登录”页面,尝试添加“登录”页面。我已经添加了,但忘记将其添加到代码段中。现在更新了
/landing
/login
的路径分别指向哪里?/landing is/pages/display/landing/登录is/users/login/login和/登陆被路由到各自的控制器和操作。使用数组表单仍然无法使用/login和/lan