[英]Laravel - can´t login after update password
我有以下問題。 我用播種機創建了一個用戶和密碼。 用戶創建良好,密碼存儲在加密的數據庫中。 而且我可以登錄。 當我嘗試更改此密碼時,我注意到數據庫中的密碼字符串發生了變化(其他內容已加密),但我無法使用新密碼或舊密碼登錄。
我在模型中有這個:
public function setPasswordAttribute($password)
{
$this->attributes['password'] = Hash::make($password);
}
並在控制器中設置新密碼我有這個
$user = AuthAction::$user;
$user->password = $subscriberData['password'];
$user->save();
最后一點,我為用戶使用的模型稱為訂閱者,當我執行 $user 變量的 var_dump 時,我可以看到它是模型訂閱者的一個實例。
這是因為您更新的密碼被散列兩次。 一個通過你雄辯的突變器
另一個通過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);
}
在 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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.