2015-02-13 4 views
0

Я пытаюсь создать вариант сброса в моем проекте. Если пользователь делает свой первый логин, он перенаправляется на страницу сброса.Сброс пароля для первого пользователя в laravel

Это частичный вид

<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> 

в страницу сброса нам нужно ввести старый пароль, новый пароль и подтверждение пароля ..

контроллер часть приводится ниже

общественная функция 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'; 
     } 
    } 
} 

Но если я попытался проверить текущий пароль и пароль пользователя, их хэш-коды не совпадают. Есть ли другие способы сброса пароля. Мне нужна одна и та же часть обзора. Может ли кто-нибудь помочь?

ответ

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'; 
} 
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(); 
       } 

      } 
     } 
Смежные вопросы