如何制作laravel Password :: Reset使用用户ID而不是电子邮件?

时间:2014-09-29 01:24:12

标签: php laravel laravel-4

我正在尝试在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其中email = peter@email.com和token = cVh08P70IfWrni2PCxP0KXGyihhc3d2u limit 1)

我还没有通过$凭证发送电子邮件,我不确定在哪里可以设置此代码来使用用户ID(id是users表的主键,user_id是password_tokens中的外键)。

我可以在我的应用程序的其他部分成功使用Auth,并使用User::find($userId);查找用户,因此我不认为我的用户模型的设置方式存在问题。 / p>

Password :: reset在哪里查找查询的条件?它是用户模型的一部分,是基于它接收的输入,还是在某个配置文件中?

2 个答案:

答案 0 :(得分:0)

这是因为密码重置需要电子邮件,你还要怎么发送密码?由于电子邮件必须与ID一样独特,因此他们不遗余力地通过ID检查来实现此功能,因为电子邮件比较也同样适用。

为什么需要它作为ID?

答案 1 :(得分:0)

如果您使用Laravel' Password::reset,它会自动将email字段添加到数据库查询中。您无需提供电子邮件地址,因为它会根据您提供的$credentials数组从数据库中提取用户模型。

扩展Laravel的任何核心文件以更改功能对您来说是不利的。这方面的最佳解决方案是创建一个向email表添加password_tokens字段的迁移。这将解决您遇到的问题,您不必重写任何现有代码。