CakeDC用户插件:使用电子邮件字段作为用户名

时间:2015-11-01 12:50:40

标签: email plugins cakedc cakephp-3.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

2 个答案:

答案 0 :(得分: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模板作为示例。我在这里使用简化版本的登录表单作为示例。

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

答案 1 :(得分: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');
}

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