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)
要检查输入的密码:
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)
等......每一次输入.
归档时间: |
|
查看次数: |
13169 次 |
最近记录: |