Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使laravel Password::Reset使用用户id而不是电子邮件?_Php_Laravel_Laravel 4 - Fatal编程技术网

Php 如何使laravel Password::Reset使用用户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

我试图在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]:未找到列:“where子句”中的1054未知列“email”(SQL:select*from
password\u令牌
where
email
=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,如果你想更改它,我可能会很有用,并告诉你这个类。