我如何设法使用电子邮件地址登录,而不是使用标准版(用户名+密码)。我在我的数据库中输入了包含我的用户的网站,但有没有办法将其更改为使用电子邮件地址而不是用户名,因为当我使用Gii时,我遇到了很多错误,即使我尝试修复这些错误
答案 0 :(得分:5)
首先,尝试找到您的SiteController或用于索引路由的任何其他控制器。它应该有一个与登录路径对应的动作功能;它通常带有签名public function actionLogin()
。
您应该看到初始化的模型(通常是LoginForm模型)。该模型应具有登录逻辑功能,检查该功能以确定用户真实性。您应该会发现此函数调用另一个login
函数,该函数需要User对象作为第一个参数/参数。该函数通常是$this->getUser()
函数。
调查这将指向您调用实际数据模型,该模型通过您指定的任何条件/属性获取用户;这可以是电子邮件或其他任何可能甚至不需要唯一的内容,但通常,您希望使用唯一的数据属性,如username
和email
。此功能依赖于用户数据模型。它通过Gii默认调用函数User::findByUsername(search_property)
Yii2提供了一个实现Identity接口的默认用户模型;那就是你想要进行调整的地方。它应该具有所需的静态函数findByUsername()
或类似的东西。您会发现Yii2默认在静态数据中搜索以查找用户,您应该将其链接到我假设您使用Gii生成的(用户)数据模型。
我的Gii序列通常如下:
config/db.php
model/User.php
重命名为model/OldUser.php
implements yii\web\IdentityInterface
添加到类声明中,使新生成的用户模型实现IdentityInterface以允许Yii2自由给定会话管理。findUserByEmail($email)
或findUserByUsername($username)
我的通常看起来像this
我希望这会有所帮助。
答案 1 :(得分:0)
由于Yii默认用户名登录,我只是改变了所有地方必须是电子邮件,而不是用户名,谢谢你的建议