使用电子邮件和密码记录,而不是使用用户名Yii 2

时间:2016-07-11 13:50:31

标签: email login yii2

我如何设法使用电子邮件地址登录,而不是使用标准版(用户名+密码)。我在我的数据库中输入了包含我的用户的网站,但有没有办法将其更改为使用电子邮件地址而不是用户名,因为当我使用Gii时,我遇到了很多错误,即使我尝试修复这些错误

2 个答案:

答案 0 :(得分:5)

首先,尝试找到您的SiteController或用于索引路由的任何其他控制器。它应该有一个与登录路径对应的动作功能;它通常带有签名public function actionLogin()

您应该看到初始化的模型(通常是LoginForm模型)。该模型应具有登录逻辑功能,检查该功能以确定用户真实性。您应该会发现此函数调用另一个login函数,该函数需要User对象作为第一个参数/参数。该函数通常是$this->getUser()函数。

调查这将指向您调用实际数据模型,该模型通过您指定的任何条件/属性获取用户;这可以是电子邮件或其他任何可能甚至不需要唯一的内容,但通常,您希望使用唯一的数据属性,如usernameemail。此功能依赖于用户数据模型。它通过Gii默认调用函数User::findByUsername(search_property)

Yii2提供了一个实现Identity接口的默认用户模型;那就是你想要进行调整的地方。它应该具有所需的静态函数findByUsername()或类似的东西。您会发现Yii2默认在静态数据中搜索以查找用户,您应该将其链接到我假设您使用Gii生成的(用户)数据模型。

我的Gii序列通常如下:

  1. 列表项
  2. 使用composer
  3. 生成yii2-basic / yii2-advanced
  4. 创建数据库(我有一个用户表)并在config/db.php
  5. 中设置正确的数据库凭据
  6. 将默认model/User.php重命名为model/OldUser.php
  7. 使用Gii创建数据模型
  8. 通过将implements yii\web\IdentityInterface添加到类声明中,使新生成的用户模型实现IdentityInterface以允许Yii2自由给定会话管理。
  9. 实现IdentityInterface所需的所有方法。你可以登入`model / OldUser.php'作为指导。
  10. 创建静态函数到findUserByEmail($email)findUserByUsername($username)
  11. 我的通常看起来像this

    我希望这会有所帮助。

答案 1 :(得分:0)

由于Yii默认用户名登录,我只是改变了所有地方必须是电子邮件,而不是用户名,谢谢你的建议