我是Laravel的绝对初学者。我目前正在使用Laravel 5.0 。
我通过默认的密码重置页面更新密码后无法登录。
一切都应该像我一样工作。 重置密码后,我在数据库中看到了更新的密码;电子邮件和重置密码的链接将发送到指定的电子邮件地址。 但是,我无法使用刚更新的新密码登录。
如果有人遇到过这种问题,你能告诉我一些意见吗?
英语不是我的第一语言,所以如果这个问题对您没有意义或需要更多信息,请留下您的意见! 任何意见,将不胜感激!提前谢谢!
Route.php
// Password reset link request routes...
Route::get('password/email', 'Auth\PasswordController@getEmail');
Route::post('password/email', 'Auth\PasswordController@postEmail');
// Password reset routes...
Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
Route::post('password/reset', 'Auth\PasswordController@postReset');
PasswordController.php
<?php namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Auth\PasswordBroker;
use Illuminate\Foundation\Auth\ResetsPasswords;
class PasswordController extends Controller {
use ResetsPasswords;
public function __construct(Guard $auth, PasswordBroker $passwords)
{
$this->auth = $auth;
$this->passwords = $passwords;
$this->middleware('guest');
}
}
答案 0 :(得分:1)
我一直在寻找答案,找不到解决办法,但后来我必须像这样解决它。
您的密码正在从用户型号中进行两次哈希处理,并在重置密码时将其中一个注释掉。
在ResetsPassword.php文件中,我删除了哈希,但在我的用户模型中保留了bcrypt并且它开始正常工作
protected function resetPassword($user, $password)
{
// $user->password = Hash::make($password);
$user->password = $password;
$user->setRememberToken(Str::random(60));
$user->save();
event(new PasswordReset($user));
$this->guard()->login($user);
}
//用户模型
public function setPasswordAttribute($password)
{
$this->attributes['password'] = bcrypt($password);
}
答案 1 :(得分:0)
我曾经发生过同样的事。我在网站的私人部分有一个表单,用户可以在其中更改电子邮件,名称和密码。
为了保存该密码而不是仅仅在表单上执行,我添加了mutator,如下所示:
/**
* Hash password on save
* @param $value
*/
public function setPasswordAttribute( $value ) {
$this->attributes['password'] = bcrypt($value);
}
问题是重置密码使用用户模型和密码得到的双重哈希为@tptcat评论。