我正在尝试在laravel 4 中实现身份验证
当用户注册时,我对密码进行散列并保存,如下所示:
$password = Hash::make(Input::get('password'));
然后,当用户尝试登录时,我想用以下代码对他/她进行身份验证:
if (Auth::attempt(array('username' => Input::get('username'), 'password' => Hash::make(Input::get('password')))))
{
return Redirect::intended('dashboard');
}
而这永远不会成功。我试着调试代码,似乎Hash::make
函数总是给出不同的结果。
我是否使用了良好的身份验证方法?
不要Hash
您给Auth::attempt
方法的密码,它应该是这样的:
Auth::attempt(array('username' => Input::get('username'), 'password' => Input::get('password')));
您也可以使用Hash::check('password', $hashedPassword)
检查密码。在Laravel
网站上阅读有关安全的更多信息。
不要在auth::attempt((函数中对密码进行散列,代码应该是这样的:
Auth::attempt(array('username' => Input::get('username'), 'password' => Input::get('password')));
auth::attempt((将散列密码,然后检查它是否与存储在数据库中的密码匹配
为了给答案添加一些解释,每次都会有所不同,因为哈希算法bcrypt会生成一个必须用于解密密码的随机字符串(salt(。
这是为了保护密码免受彩虹表攻击。https://en.wikipedia.org/wiki/Rainbow_table