我正在尝试在Laravel中重置用户的密码,但是Password :: reset方法正在查找password_tokens表中的电子邮件列,而不是id列。
$credentials = ['password' => Input::get('password'),
'id' => $currentUser->id,
'token' => Input::get('token'),
'password_confirmation' => Input::get('password_confirmation')];
return Password::reset($credentials, function($user, $password)
{
$user->password = Hash::make($password);
$user->save();
return Redirect::to('public_site.admin')->with('flash', 'Your password has been reset');
});
这给了我以下错误:
SQLSTATE [42S22]:未找到列:1054未知列'电子邮件'在' where子句' (SQL:select * from
password_tokens
其中token
= cVh08P70IfWrni2PCxP0KXGyihhc3d2u limit 1)
我还没有通过$凭证发送电子邮件,我不确定在哪里可以设置此代码来使用用户ID(id是users表的主键,user_id是password_tokens中的外键)。
我可以在我的应用程序的其他部分成功使用Auth,并使用User::find($userId);
查找用户,因此我不认为我的用户模型的设置方式存在问题。 / p>
Password :: reset在哪里查找查询的条件?它是用户模型的一部分,是基于它接收的输入,还是在某个配置文件中?
答案 0 :(得分:0)
这是因为密码重置需要电子邮件,你还要怎么发送密码?由于电子邮件必须与ID一样独特,因此他们不遗余力地通过ID检查来实现此功能,因为电子邮件比较也同样适用。
为什么需要它作为ID?
答案 1 :(得分:0)
如果您使用Laravel' Password::reset
,它会自动将email
字段添加到数据库查询中。您无需提供电子邮件地址,因为它会根据您提供的$credentials
数组从数据库中提取用户模型。
扩展Laravel的任何核心文件以更改功能对您来说是不利的。这方面的最佳解决方案是创建一个向email
表添加password_tokens
字段的迁移。这将解决您遇到的问题,您不必重写任何现有代码。