我有以下问题。我用播种机创建用户和密码。用户创建正常,密码存储在db加密中。我可以登录当我尝试更改此密码时,我注意到db中密码的字符串发生了更改(其他内容已加密),但我无法使用新密码登录,也无法使用旧密码登录。
我在模型中有这个:
public function setPasswordAttribute($password)
{
$this->attributes['password'] = Hash::make($password);
}
并在控制器中设置新密码我有这个
$user = AuthAction::$user;
$user->password = $subscriberData['password'];
$user->save();
最后一点,我为用户使用的模型称为Subscriber,当我执行$ user变量的var_dump时,我可以看到它是模型订阅者的一个实例。
在Laravel中使用Bcrypt散列密码:
$password = Hash::make('yourpassword');
这将创建一个哈希密码。您可以在控制器中甚至在模型中使用它,例如,如果用户使用POST方法使用表单向控制器提交密码,那么您可以使用以下内容对其进行散列:
$password = Input::get('passwordformfield'); // password is form field
$hashed = Hash::make($password);
这里,$ hashed将包含哈希密码。基本上,您在创建/注册新用户时会这样做,因此,例如,如果用户使用表单提交详细信息(如姓名,电子邮件,用户名和密码等),则在将数据插入数据库之前,验证数据后会对密码进行哈希处理。有关更多信息,请阅读文档。
更新:
$password = 'JohnDoe';
$hashedPassword = Hash::make($password);
echo $hashedPassword; // $2y$10$jSAr/RwmjhwioDlJErOk9OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy
因此,您将$ hashedPassword插入数据库。希望,现在很清楚,如果你仍然感到困惑,那么我建议你阅读一些教程,在laracasts.com和tutsplus.com上观看一些屏幕演员并阅读一本关于Laravel的书,这是一本免费的电子书,你可以下载它。
更新:由于OP希望使用Laravel Hash手动加密密码而没有任何类或形式,因此这是从命令提示符使用artisan tinker的另一种方法:
转到命令提示符/终端导航到Laravel安装(项目的根目录)使用cd并从命令提示符/终端按Enter然后编写php artisan tinker并按Enter键然后编写echo Hash :: make('somestring');你将在控制台上获得一个哈希密码,复制它,然后做你想做的任何事情。更新(Laravel 5.x):
// Also one can use bcrypt
$password = bcrypt('JohnDoe');
$user = AuthAction::$user;
$user->password = Hash::make($subscriberData['password']);
$user->save();
这是因为您更新的密码被哈希两次。一个通过你雄辩的变异者
另一个是通过ResetPasswordController。
protected function resetPassword($user, $password)
{
$user->forceFill([
'password' => bcrypt($password),//problem is here, $password was already hashed by eloquent mutator
'remember_token' => str_random(60),
])->save();
$this->guard()->login($user);
}
您可以通过覆盖ResetPasswordController中的resetPassword函数来解决此问题,如下所示:
protected function resetPassword($user, $password)
{
$user->forceFill([
'password' => $password,
'remember_token' => str_random(60),
])->save();
$this->guard()->login($user);
}