Cakephp 3认证教程登录直接发布

Cakephp 3认证教程登录直接发布,php,authentication,cakephp,Php,Authentication,Cakephp,我已经关注了官方网站上的教程,但是重定向部分第一次不起作用 步骤1:转到用户/登录并使用正确的凭据登录。 结果:登录成功,但重定向到页面/主页,而不是文章/索引。 步骤2:再次转到用户/登录,并使用正确的凭据登录。 结果:正确重定向到文章/索引(会话已登录) 我怎样才能解决这个问题 在我尝试授权部分之前,它似乎工作正常。(不确定)。但我已经评论了所有授权部分。还没修好 我遗漏了什么 应用控制器 <?php namespace App\Controller; use Cake\Contro

我已经关注了官方网站上的教程,但是重定向部分第一次不起作用

步骤1:转到用户/登录并使用正确的凭据登录。
结果:登录成功,但重定向到页面/主页,而不是文章/索引。
步骤2:再次转到用户/登录,并使用正确的凭据登录。
结果:正确重定向到文章/索引(会话已登录)

我怎样才能解决这个问题

在我尝试授权部分之前,它似乎工作正常。(不确定)。但我已经评论了所有授权部分。还没修好

我遗漏了什么

应用控制器

<?php
namespace App\Controller;

use Cake\Controller\Controller;
use Cake\Event\Event;

class AppController extends Controller
{

    public function initialize()
    {
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
        //  'authorize' => ['Controller'], // Added this line
            'loginRedirect' => [
                'controller' => 'Articles',
                'action' => 'index'
            ],
            'logoutRedirect' => [
                'controller' => 'Pages',
                'action' => 'display',
                'home'
            ]
        ]);
    }

    //public function isAuthorized($user)
    //{
    //    // Site Admin can access every action
    //    if (isset($user['role']) && $user['role'] === 'admin') {
    //        return true;
    //    }
    //
    //    // Default deny
    //       return false;
    //
    //}

    public function beforeFilter(Event $event)
    {
        $this->Auth->allow(['index','display']);
    }

}
?>

更新

如果我直接访问登录URL,即users/login,然后登录,那么它工作得非常好。 但是,我的页面/主页中有一个按钮,单击该按钮可重定向到用户/登录页面。 通过按钮使用此路径,如果我登录,我将面临问题

注意:如果使用debugKit查看会话信息,则会显示重定向到/

home.ctp文件中的按钮代码

<?php echo $this->Html->link('<span class = "glyphicon glyphicon-log-in"></span> Login',['controller' => 'users', 'action' => 'login'],['escape' => false]);?>

通过编写以下代码来解决此问题:

用户控制器:

AppController:


这里,
$this->Here
是您的文件路径。希望这对你有帮助

来自CakePHP文档,关于$loginDirect: :$loginRedirect

如果用户在会话中具有Auth.redirect值,则将忽略此值

因此,您的
$this->Auth->loginDirect
将被忽略。您可以从会话中手动删除
Auth.redirect
值。这是一个快速的破解,不需要更改每个URL的值

$session = $this->request->session();
if($session->read('Auth.redirect') === '/') {
    $session->delete('Auth.redirect');
}

清除所有缓存和会话数据后重试?@AddWebSolutionPvtLtd我试过了。然而,我发现了另一件事。请在问题中找到我的更新,谢谢。现在我明白了。问题在于
Auth.redirect
值。谢谢你的修复
public function beforeFilter(){
    if($this->here != '/cmap/users/login'){
        $this->Session->write('Auth.redirect', $this->here);
    } 
}
$session = $this->request->session();
if($session->read('Auth.redirect') === '/') {
    $session->delete('Auth.redirect');
}