Php 如何使laravel Password::Reset使用用户id而不是电子邮件?
我试图在Laravel中重置用户的密码,但password::reset方法在password_tokens表中查找电子邮件列,而不是id列Php 如何使laravel Password::Reset使用用户id而不是电子邮件?,php,laravel,laravel-4,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('p
$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]:未找到列:“where子句”中的1054未知列“email”(SQL:select*frompassword\u令牌
whereemail
=peter@email.com和令牌
=CVH08P70IFWRNI2PCXP0KXGYIHC3D2U限制1)
我还没有在$credentials中传递电子邮件,也不确定在哪里可以设置它以使用用户id(id是users表的主键,user_id是password_令牌中的外键)
我可以在应用程序的其他部分成功地使用Auth,并使用User::find($userId)查找用户代码>也是如此,所以我认为我的用户模型的设置方式没有问题
Password::reset在哪里查找查询条件?它是用户模型的一部分,是基于它接收到的输入,还是在某个配置文件中?这是因为密码重置需要电子邮件,否则您将如何发送密码?由于电子邮件必须和ID一样唯一,他们不遗余力地通过ID检查来实现这一点,因为电子邮件比较也同样有效
为什么需要它作为ID?如果使用Laravel的密码::重置
,它会自动将电子邮件
字段添加到数据库查询中。它不需要您提供电子邮件地址,因为它根据您提供的$credentials
数组从数据库中获取用户模型
扩展Laravel的任何核心文件来更改功能对您都没有好处。最好的解决方案是创建一个迁移,将电子邮件
字段添加到密码\u令牌
表中。这将解决您所面临的问题,您不必重写任何现有代码。以下是实现Password::reset
。不建议编辑核心文件这真的太糟糕了,因为我正在尝试调整密码提醒表,以便注册和用户更改其电子邮件地址。如果没有用户id,则无法执行此操作。不幸的是,Laravel维护人员在这里错过了一个机会,这令人失望。我的所有其他表都将用户id作为外键引用。在这里打破这一惯例似乎是违反直觉的——我不确定这是该框架的意图。我不一定需要它是一个ID,也不需要使用内置的Password::reset
。如果答案是我不能使用用户id,我可以解决这个问题。你可以编辑函数。。。只需扩展拥有它的类并覆盖它。即使我不认为有什么特别的需要,你当然可以这样做。这个函数是illumb\Auth\rementers\PasswordBroker,如果你想更改它,我可能会很有用,并告诉你这个类。