Laravel 5密码重置无法正常工作

时间:2015-04-23 08:06:35

标签: php laravel-5 forgot-password

我正在开发laravel 5电子商务门户网站。

当用户使用现成的脚本更新密码时,我遇到了问题。

问题是我可以完美地将链接发送给客户而不会出现任何问题,客户也可以更改密码。但是当注销并重新登录时,我会收到错误sudo apt-get install cmdtest

在我的routes.php中,我有这个:

Invalid credentials

这是登录页面:

Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
]);

重置密码后,我在注销后无法再次登录。

编辑1

在登录表单页面上单击登录按钮时,将调用<form class="form-horizontal" role="form" method="POST" action="{{ url('/login') }}"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> <div class="form-group"> <label class="col-md-4 control-label">E-Mail Address</label> <div class="col-md-6"> <input type="email" class="form-control" name="email" value="{{ old('email') }}"> </div> </div> <div class="form-group"> <label class="col-md-4 control-label">Password</label> <div class="col-md-6"> <input type="password" class="form-control" name="password"> </div> </div> <div class="form-group"> <div class="col-md-4"></div> <div class="col-md-4"> <a href="{{url('/password/email')}}">Forgot Password</a> </div> </div> <div class="form-group"> <div class="col-md-6 col-md-offset-4"> <button type="submit" class="btn btn-primary btn-block">Login</button> </div> </div> </form> 方法。这是代码

postLogin

编辑2

我只是意识到在更新密码并重新登录后,登录不会检查哈希值,因此会在执行public function postLogin( Request $request ) { $this->validate( $request, [ 'email' => ['required', 'exists:users,email,role,customer'], 'password' => 'required' ]); $credentials = $request->only('email', 'password'); if ( \Auth::attempt($credentials) ) { \Session::flash('logged_in', 'You have successfully logged in.'); return redirect('/'); } return redirect('/login')->withInput($request->all())->withErrors(['email' => 'Invalid Email Address Or Password']); } 时返回false。这可能是什么问题?< / p>

我哪里弄错了?请指导我。

提前致谢。

P.S。:我只使用默认设置更新密码,全部休息,我已经完成了所有工作正常的控制器和模型,没有任何问题。

2 个答案:

答案 0 :(得分:0)

如果更改后新密码不起作用,则更改密码时会出现问题。

最可能怀疑是加密。您可能没有使用Hash :: make($ password)并以纯文本格式保存它。

如果使用函数Hash :: check($ password,$ hash)将数据库正确保存到数据库,则可以重新检查;

在登录期间,您可以将密码检查为

public function postLogin( Request $request ) {
    $user=User::where('email', $request->email);
    Log::debug("Testing $request->password $user->password ". Hash::check($request->password, $user->password));
}

如果Hash :: check为false,则在保存新密码时出现问题。 $ user-&gt;密码必须采用哈希形式。

答案 1 :(得分:0)

我也偶然发现了这个问题,并找到了答案here,只是添加了这个以供将来参考。

原因是,一旦在setPasswordAttribute模型上添加User方法,使用Laravel的内置密码重置功能时,密码就会被哈希两次。如“ Laracast”页面上所述,只需检查已散列的密码即可,例如:

// Add Hash facade
use Illuminate\Support\Facades\Hash;

class User extends Authenticatable
{

    // ...

    /**
     * Automatically hash password
     * 
     * @param String $value The password, maybe hashed already
     * 
     * @return string|null
     */
    public function setPasswordAttribute($value)
    {
        if ($value) {
            $this->attributes['password'] = Hash::needsRehash($value) ? Hash::make($value) : $value;
        }
    }
}