我正在尝试更改用户的密码,我需要检查该用户的旧密码是否与我从html“oldpass”文本框中获取的值匹配。如果现有密码值和“oldpass”值匹配,则新密码将在数据库中更新。我从数据库获取的密码值已加密。
$ userpass = User :: where('id','=',Session :: get('userid')) - > get(array('password')); 问题是$ userpass返回一个空值。
以下是代码:
$oldpass = Hash::make(Input::get('oldpass'));//Getting password from html form
$userpass = User::where('id', '=', Session::get('userid'))->get(array('password'));//Getting password value from database Users table
if ($oldpass === $userpass) {
User::where('id', '=', Session::get('userid'))
->update(array(
'password' => Hash::make(Input::get('newpass'))
));
} else {
Return View::make('changepass.changepass')
->with('errormessage', 'Password does not match');
}
答案 0 :(得分:1)
这里有两个主要问题。
一方面,$userpass
返回null,因为get()
不是fecth列的适当函数。您可以使用pluck(参见query builder docs)
无论如何,只要您获取用户,就可以调用该属性:
$userpass = User::find(Session::get('userid'))->password;
您正在尝试将散列密码与普通密码进行比较。 Laravel使用Guard
默认情况下,管理用户身份验证和Guard使用Hash::make
来存储它。您应该将哈希值与:
Hash::check($oldpass, $userpass)
您也可以使用Guard检查用户凭据是否正确Auth::validate($credentials)
(请参阅Laravel Security),然后更改密码,如:
if(Auth::validate('id' => Session::get('userid'), 'password' => Input::get('oldpass'))){
//Assuming user was authenticated before. If not use Auth::attempt instead of validate
Auth::user()->password = Hash::make(Input::get('newpass'));
} else {
Return View::make('changepass.changepass')
->with('errormessage', 'Password does not match');
}