编辑帐户中密码字段的 Laravel 4 验证器
Posted
技术标签:
【中文标题】编辑帐户中密码字段的 Laravel 4 验证器【英文标题】:Laravel 4 validator for password field in edit account 【发布时间】:2013-07-27 19:25:58 【问题描述】:我需要检查用户是否发布了与数据库中相同的密码。旧密码字段为“oldpass”。我创建的自定义验证器称为“passcheck”。它应该相应地失败或通过。
下面的我的 UsersController 代码不起作用。我做错了什么?
$rules = array(
'oldpass' => 'passcheck',
);
$messages = array(
'passcheck' => 'Your old password was incorrect',
);
Validator::extend('passcheck', function($attribute, $value, $parameters)
if(!DB::table('users')->where('password', Hash::make(Input::get('oldpass')))->first())
return false;
else
return true;
;
);
$validator = Validator::make($inputs, $rules, $messages);
【问题讨论】:
那么问题是什么? 呵呵,@TryingTobemyselfRahul 我刚刚更新了这个问题。感谢您的指正。请检查 【参考方案1】:我会这样:
/**
* Rule is to be defined like this:
*
* 'passcheck:users,password,id,1' - Means password is taken from users table, user is searched by field id equal to 1
*/
Validator::extend('passcheck', function ($attribute, $value, $parameters)
$user = DB::table($parameters[0])->where($parameters[2], $parameters[3])->first([$parameters[1]]);
if (Hash::check($value, $user->$parameters[1]))
return true;
else
return false;
);
此验证器规则将进行数据库查询以检查当前用户的密码
你可以让它更短并保存查询:
Validator::extend('passcheck', function ($attribute, $value, $parameters)
return Hash::check($value, Auth::user()->getAuthPassword());
);
【讨论】:
【参考方案2】:你应该使用这样的东西,
$user = DB::table('users')->where('username', 'someusername')->first();
if (Hash::check(Input::get('oldpass'), $user->password))
// The passwords match...
return true;
else
return false;
因此,您必须使用username
或任何其他field
获取记录,然后检查密码。
@lucasmichot 提供了更短的解决方案:
Validator::extend('passcheck', function ($attribute, $value, $parameters)
return Hash::check($value, Auth::user()->getAuthPassword());
);
【讨论】:
非常感谢!没有散列的任何其他输入怎么样,例如我尝试使用的复选框: if(Input::get('termsandconditions') == '0')return false;elsereturn true;; ); 不客气,if(Input::get('termsandconditions') == 0) // not checked
,同时检查accepted验证规则。【参考方案3】:
请不要将您的规则绑定到 html 元素。使用 Laravel 提供的参数来创建你的自定义规则。这将是(假设您有一个经过身份验证的用户):
Validator::extend('passcheck', function($attribute, $value, $parameters)
return Hash::check($value, Auth::user()->password); // Works for any form!
);
$messages = array(
'passcheck' => 'Your old password was incorrect',
);
$validator = Validator::make(Input::all(), [
'oldpass' => 'passcheck',
// more rules ...
], $messages);
【讨论】:
以上是关于编辑帐户中密码字段的 Laravel 4 验证器的主要内容,如果未能解决你的问题,请参考以下文章