Laravel更新密码通过验证但不更新记录

001*_*221 1 php authentication passwords laravel eloquent

嗨我正在使用Laravel,我正在使用几个用户身份验证和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');
            }


}
Run Code Online (Sandbox Code Playgroud)

使用此代码块不会更新用户密码的原因

$user = User::find($id);
$user->password = Hash::make($password);
$user->save();
Run Code Online (Sandbox Code Playgroud)

用户模型

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


}
Run Code Online (Sandbox Code Playgroud)

Xyr*_*rus 8

要检查输入的密码:

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
}
Run Code Online (Sandbox Code Playgroud)

2.

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

检查它们是否匹配以及新密码是否与旧密码不同.

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

并将您的表单编辑为(或输入您的姓名):

{{ 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')}}
Run Code Online (Sandbox Code Playgroud)

更新

好的,所以你不想只编辑密码.

编辑规则:

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

我认为在每种类型的更改中都应该要求当前的密码.不需要其他输入imo,因为您不知道用户想要编辑哪些数据.

您还应该添加以下内容:

'username'  => alpha_num|unique:users,username
Run Code Online (Sandbox Code Playgroud)

等..(更多信息请参阅http://laravel.com/docs/4.2/validation#available-validation-rules)

如果验证器通过,您应该检查用户想要更改的数据(哪些输入不为空).就像是:

if(!empty(Input::get('firstname'))){
    $user->firstname    = Input::get('firstname');
}
Run Code Online (Sandbox Code Playgroud)

等......每一次输入.