Laravel - 更新密码后无法登录

问题描述 投票:0回答:3

我有以下问题。我用播种机创建用户和密码。用户创建正常,密码存储在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时,我可以看到它是模型订阅者的一个实例。

php laravel
3个回答
0
投票

在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');

0
投票
$user = AuthAction::$user;
$user->password = Hash::make($subscriberData['password']);
$user->save();

0
投票

这是因为您更新的密码被哈希两次。一个通过你雄辩的变异者

另一个是通过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);
}
© www.soinside.com 2019 - 2024. All rights reserved.