我正在尝试在项目中创建重置选项。如果用户首次登录,则会重定向到重置页面。
这是视图部分
<div class="form-group{{ ($errors->has('cpassword')) ? 'has error' : '' }}">
<label for="cpassword">Current Password: </label>
<input id="cpassword" name="cpassword" type="text" class="form-control">
@if($errors->has('cpassword'))
{{ $errors->first('cpassword')}}
@endif
</div>
<div class="form-group{{ ($errors->has('password')) ? 'has error' : '' }}">
<label for="password">New Password: </label>
<input id="password" name="password" type="password" class="form-control">
@if($errors->has('password'))
{{ $errors->first('password')}}
@endif
</div>
<div class="form-group{{ ($errors->has('password2')) ? 'has error' : '' }}">
<label for="password2">Confirm Password: </label>
<input id="password2" name="password2" type="password" class="form-control">
@if($errors->has('password2'))
{{ $errors->first('password2')}}
@endif
</div>
{{ Form::token() }}
<div class="form-group">
<input type="submit" value="Submit" class="btn btn-default">
</div>
在重置页面中我们需要输入旧密码,新密码和确认密码..
控制器部分如下所示
public function postReset(){
$validator =Validator::make(Input::all(), array(
'cpassword' => 'required',
'password' => 'required|min:8',
'password2' => 'required|min:8|same:password'
));
if ($validator->fails())
{
return Redirect::route('resetPassword')->withErrors($validator)->withInput();
}
else
{
if (Auth::attempt(array('username'=>Auth::user()->username, 'password'=>Hash::make(Input::get('cpassword'))))) {
return 'password is resetted';
}
}
}
但是如果我尝试验证当前密码和userpasssword,他们的哈希码就不匹配了。有没有其他方法可以重置passord。我需要相同的视图部分。 任何人都可以帮忙??
答案 0 :(得分:0)
Auth::attempt()
方法需要普通密码,您不能自己生成哈希值。 Laravel的哈希也只能通过比较来验证,因为每个哈希包含一个随机盐。要将密码与其哈希进行比较,您必须使用Hash::check()
。此外,由于您的用户已经登录,Auth::attempt()
工作Auth::validate()
将是更好的选择:
$credentials = array(
'username' => Auth::user()->username,
'password' => Input::get('cpassword')
);
if(Auth::validate($credentials)){
return 'password is resetted';
}
答案 1 :(得分:0)
Laravel内置了一个“忘记”密码功能,您可以使用该功能让人们在忘记密码时重置密码。
您可以在http://laravel.com/docs/5.0/authentication
找到如果您希望某人能够更改密码(并且能够记住旧密码),您可以执行以下操作:
if(Input::get('passwordIs')) {
if (!Hash::check(Input::get('passwordIs'), Auth::user()->password))
return Redirect::to('my-account/settings/')->withErrors(Lang::get('account.password-wrong'));
else {
if(Input::get('passwordIsNew') !== Input::get('passwordIs_confirmation'))
return Redirect::to('my-account/settings/')->withErrors(Lang::get('account.passwords-must-match'));
else{
$password = Hash::make(Input::get('passwordIs_confirmation'));
$customer = Auth::user();
$customer->password = $password;
$customer->save();
}
}
}