CakePHP 从不同视图登录

Posted

技术标签:

【中文标题】CakePHP 从不同视图登录【英文标题】:CakePHP login from different views 【发布时间】:2018-07-06 11:33:17 【问题描述】:

我正在使用 Cakephp 3.6,我希望允许用户从不同的视图登录。我有 2 个相同的表单,但每个页面上都有一个,而另一个只有 1 页。 让我告诉你:

这是我的 AppControler 的初始化函数

public function initialize()

    parent::initialize();

    $this->loadComponent('RequestHandler', [
        'enableBeforeRedirect' => false,
    ]);
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'authorize'=> 'Controller',
        'authenticate' => [
            'Form' => [
                'fields' => [
                    'username' => 'email',
                    'password' => 'password'
                ]
            ]
        ],
        'loginAction' => [
            'controller' => 'Users',
            'action' => 'login'
        ],
         // If unauthorized, return them to page they were just on
        'unauthorizedRedirect' => $this->referer()
    ]);


这是我的UsersController登录功能:

public function login()


    if($this->request->is('post')) 
        $user = $this->Auth->identify();
        if($user) 
            $this->Auth->setUser($user);
            $this->Flash->success('You logged succesfully!');
            return $this->redirect($this->referer());
        

        // Invalid login
        $this->Flash->error('Incorrect login');
    

这是表格(记住它们是一样的):

<?php if(!$loggedIn): ?>
    <?= $this->Form->create(null, ['class' => 'form-signin']) ?>

        <h2 class="form-signin-heading">Login</h2>
        <?= $this->Form->input('email', ['required' => true, 'class' => 'form-control', 'placeholder' => 'Email', 'label' => false]) ?>
        <?= $this->Form->input('password', ['type' => 'password', 'required' => true, 'class' => 'form-control', 'placeholder' => 'Contraseña', 'label' => false]) ?>
        <?= $this->Form->input('remember', ['type' => 'checkbox', 'value' => 'remember-me']) ?>
        <?= $this->Form->submit('Entrar', ['class' => 'btn btn-lg btn-primary btn-block' ]); ?>

    <?= $this->Form->end() ?>
<?php endif; ?>

这个问题对我来说似乎很明显,但我不知道如何解决它。所有视图中的表单都不起作用,而仅在用户视图中。似乎登录操作只有在我在用户视图中时才有效...

谢谢!

【问题讨论】:

【参考方案1】:

只需将每个视图中的表单更改为 url,以便将 POST 数据发送到用户/登录

echo $this->Form->create(null, [
    'class' => 'form-signin', 
    'url' => ['controller' => 'Users', 'action' => 'login']
]); 

【讨论】:

谢谢你!这正是我需要做的,但现在我遇到了令牌问题:在请求数据中找不到'_Token'。我该如何解决? 您是否启用了安全组件? 是的,我希望它启用,但我不知道为什么会出现这个错误。 我不确定,但我认为是因为安全组件不允许您将数据从控制器发送到另一个控制器。或者你可能只是为 usersController 加载了这个组件,而你在其他视图中没有表单篡改控制 我已经在AppController的初始化函数中加载了安全组件。

以上是关于CakePHP 从不同视图登录的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 cakephp 视图传递给控制器

如何在 cakephp 中为不同的模型设置不同的布局

在 CakePHP 中使用不同的用户角色登录?

CakePHP:保存从 MySQL 视图加载的模型

CakePHP4 Ajax:从控制器发送到视图

从 cakePHP 中的控制器输出超链接