是否可以将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
答案 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');
}
这将在登录时检查电子邮件和用户名。