1

是否可以将 CakeDC 的用户插件配置为使用电子邮件字段作为用户名?

默认情况下,用户插件中同时包含用户名和电子邮件字段,一切都很好!但我想使用电子邮件作为用户名进行身份验证,这样可以简化用户注册。

我尝试通过在AppController中加载 Auth 组件来覆盖UsersAuthComponent,但登录停止工作并显示“错误的用户名或密码”。

public function initialize()
{
    parent::initialize();
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'loginAction' => [
            'plugin' => 'CakeDC/Users',
            'controller' => 'Users',
            'action' => 'login',
        ],
        'authenticate' => [
            'all' => [
                'scope' => ['active' => 1]
            ],
            'CakeDC/Users.RememberMe',
            'Form' => [
                'fields' => ['username' => 'email', 'password' => 'password']
            ]
        ],
        'authorize' => [
            'CakeDC/Users.Superuser',
            'CakeDC/Users.SimpleRbac',
        ],
        'storage' => 'Session'
    ]);

    $this->loadComponent('CakeDC/Users.UsersAuth');
}

按照文档,我还关闭了bootstrap.php 中UsersAuthComponent

Configure::write('Users.auth', false);

有诀窍吗?我相信这是可能的,或者可能是一个错误?

我正在使用 CakePHP 3.1 和 CakeDC 用户插件 3.1

4

2 回答 2

1

您可能缺少的部分是覆盖 login.ctp 模板以更改表单并让用户输入他的电子邮件

为此,您需要在 /src/Template/Plugin/CakeDC/Users/Users/login.ctp 下创建一个文件,其中包含您希望用于登录页面的内容(通常您需要在您所做的每个应用程序)并确保您在该视图中创建输入“电子邮件”。代码可能是这样的

<div class="users form">
    <?= $this->Flash->render('auth') ?>
    <?= $this->Form->create() ?>
    <fieldset>
        <legend><?= __d('Users', 'Please enter your username and password') ?></legend>
        <?= $this->Form->input('email', ['required' => true]) ?>
        <?= $this->Form->input('password', ['required' => true]) ?>
    </fieldset>
    <?= $this->Form->button(__d('Users', 'Login')); ?>
    <?= $this->Form->end() ?>
</div>

如果您想保留社交登录链接、记住我等,您可以使用 CakeDC/Users login.ctp 模板作为示例。我在这里使用登录表单的简化版本作为示例。

我们将很快改进插件以简化此覆盖。

于 2016-02-19T01:20:27.897 回答
0

我认为这就是 MultiColumnAuthenticate 的用途,只是在 GitHub 上查看插件。尝试这样的事情:

public function initialize()
{
    parent::initialize();
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'loginAction' => [
            'plugin' => 'CakeDC/Users',
            'controller' => 'Users',
            'action' => 'login',
        ],
        'authenticate' => [
            'all' => [
                'scope' => ['active' => 1]
            ],
            'CakeDC/Users.RememberMe',
            'FOC/Authenticate.MultiColumn' => [
                'fields' => [
                    'username' => 'username',
                    'password' => 'password'
                ],
                'columns' => ['username', 'email'],
                'userModel' => 'Users',
            ]
        ],
        'authorize' => [
            'CakeDC/Users.Superuser',
            'CakeDC/Users.SimpleRbac',
        ],
        'storage' => 'Session'
    ]);

    $this->loadComponent('CakeDC/Users.UsersAuth');
}

这将在登录时检查电子邮件和用户名。

于 2015-11-02T23:07:31.413 回答