Сброс пароля для первого пользователя в 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>

in reset page we need to enter old password, new password and confirm password..

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

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

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


person manoos    schedule 13.02.2015    source источник


Ответы (2)


Метод 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';
}
person lukasgeiter    schedule 13.02.2015

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

            }
        }
person Joey    schedule 13.02.2015