Пароль обновления для Laravel проходит проверку, но не обновляет запись

Привет Я использую Laravel, и я использую пару пакетов для пользовательских auth и ролей, которые являются Zizaco Confide, и я хочу обновить пароль пользователей, прежде всего, они должны ввести туда текущий пароль, новый пароль и подтвердить пароль, и они должны совпадать. Теперь проверка выполняется, но пароль пользователя не обновляется в базе данных. Мой код ниже:

public function updatePassword($id) { $rules = array( 'now_password' => 'required', 'password' => 'min:5|confirmed|different:now_password', 'password_confirmation' => 'required_with:password|min:5' ); //password update. $now_password = Input::get('now_password'); $password = Input::get('password'); $passwordconf = Input::get('password_confirmation'); $validator = Validator::make(Input::only('now_password', 'password', 'password_confirmation'), $rules); if ($validator->fails()) { return Redirect::back()->withErrors($validator); } elseif (Hash::check($now_password, Auth::user()->password)) { $user = User::find($id); $user->password = Hash::make($password); $user->save(); return Redirect::back()->with('success', true)->with('message','User updated.'); } else { return Redirect::back()->withErrors('Password incorrect'); } } 

Любые идеи, почему пароль пользователей не обновляется, используя этот блок кода

 $user = User::find($id); $user->password = Hash::make($password); $user->save(); 

Модель пользователя

 <?php use Zizaco\Confide\ConfideUser; use Zizaco\Confide\ConfideUserInterface; use Zizaco\Entrust\HasRole; class User extends Eloquent implements ConfideUserInterface { use SoftDeletingTrait; use ConfideUser; use HasRole; protected $softDelete = true; public function favourites() { return $this->hasMany('Favourite'); } } 

Чтобы проверить введенный пароль:

1.

  $now_password = Input::get('now_password'); $user = DB::table('users')->where('name', Auth::user()->name)->first(); if(Hash::check($now_password, $user->password)){ //Your update here } 

2.

 $now_password = Input::get('now_password'); if(Hash::check($now_password, Auth::user()->password)){ //Your update here } 

Чтобы проверить, соответствуют ли они, и если новый пароль отличается от старого.

 $rules = array( 'now_password' => 'required|min:8', 'password' => 'required|min:8|confirmed|different:now_password', 'password_confirmation' => 'required|min:8', ); 

И отредактируйте свою форму (или введите свои имена):

 {{ Form::label('now_password', 'Old Password') }} {{ Form::password('now_password')}} {{ Form::label('password', 'New Password') }} {{ Form::password('password')}} {{ Form::label('password_confirmation', 'Confrim New Password') }} {{ Form::password('password_confirmation')}} 

Обновить

Итак, вы не хотите редактировать только пароли.

Редактируйте свои правила:

 $rules = array( 'now_password' => 'required|min:5', 'password' => 'min:5|confirmed|different:now_password', 'password_confirmation' => 'required_with:password|min:5' ); 

Я думаю, что текущий пароль должен быть необходим при каждом изменении. Другие входы imo не требуются, потому что вы не знаете, какие данные пользователь хочет редактировать.

Вы также должны добавить к своим правилам что-то вроде:

 'username' => alpha_num|unique:users,username 

и т. д. (подробнее см. http://laravel.com/docs/4.2/validation#available-validation-rules )

Если валидатор проходит, вы должны проверить, какой пользователь хочет изменить (какие входы не пустые). Что-то вроде:

 if(!empty(Input::get('firstname'))){ $user->firstname = Input::get('firstname'); } 

и т. д. с каждым входом.

Попробуйте вот так:

 public function updatePassword($id) { $user = User::findOrFail($id); User::$rules['now_password'] = 'required'; // other rules here $validator = Validator::make($data = Input::all(), User::rules('update', $id)); if ($validator->fails()) { return Redirect::back()->withErrors($validator)->withInput(); } array_forget($data, 'password_confirmation'); array_forget($data, 'now_password'); $data['password'] = Hash::make($data['password']); $user->update($data); return Redirect::back()->with('success', true)->with('message','User updated.'); } 

помните, что ваше имя для подтверждения пароля должно быть «password_confirmation», если вы использовали первый способ … если вы использовали другое имя для поля подтверждения пароля, вы можете использовать второй способ.

 $this->validate($request, [ 'email' => 'required|unique:user|email|max:255', 'username' => 'required|max:20', 'password' => 'required|min:3|confirmed', 'password_confirmation' => 'required', 'gender' => 'required|in:m,f', ]); $this->validate($request, [ 'email' => 'required|unique:user|email|max:255', 'username' => 'required|max:20', 'password' => 'required|min:3', 'confirm_password' => 'same:password', 'gender' => 'required|in:m,f', ]); 
 public function change_password_post($id) { $rules = array( 'current' => 'required|string|min:8', 'new' => 'required|string|min:8', 'confirm' => 'required|same:new' ); $validator = Validator::make(Input::only('current', 'new', 'confirm'), $rules); if($validator->fails()) { return Redirect::back() ->withErrors($validator); } else { $users = User::where('id', '=', $id)->first(); if (Hash::check(Input::get('current'), $users->password)) { if(Input::get('new') == Input::get('confirm')) { $users->password =Hash::make(Input::get('new')); $users->save(); $msg = array('msg' => 'Password changed Successfully'); return Redirect::back() ->withErrors($msg); } else { $msg = array('msg' => 'New password and Confirm password did not match'); return Redirect::back() ->withErrors($msg); } } else { $msg = array('msg' => 'Current password is incorrect'); return Redirect::back() ->withErrors($msg); } } }