哈希密码不匹配 - Laravel

时间:2015-02-05 11:53:01

标签: php laravel hash

我正在使用Laravel 4,我的数据库表/页面是使用旧版本的Laravel创建的。版本3.我相信。

我有一个用户登录系统,当从视图中将散列密码传递给控制器​​时,它不匹配数据库'密码。

我的哈希码是:

数据库

  

$ 08 $ wqCWqMgG7SRIukdyNEbXX.kK5c.8BxqzGVJSaCC55eKndFjqrJqJG

表格

  

$ 2Y $ 10 $ hJQsF7.KkuXw4GYb8vk1o.SZhdocP7e8SxcjvBWjtLzpJPBlX0f5q

我的Laravel控制器代码是:

public function postLogin()
    {

        $email = Input::get('email');
        $password = Hash::make(Input::get('Password'));

        dd($password);

        $credentials = array(
            'user_email' => Input::get('UserName'),
            'user_password' => Input::get('Password')
        );

        if(Auth::attempt($credentials))
        {
            return Redirect::to('dashboard')->with('message', 'You are now logged in!');
        }
        else
        {
            return Redirect::to('users/login')
                           ->with('message', 'Your username/password combination was incorrect')
                           ->withInput();
        }
    }

是否与较旧版本的数据库不匹配?关于我可以检查/更改以匹配的任何建议。

干杯

2 个答案:

答案 0 :(得分:3)

哈希不会匹配'当你比较那样的时候。所有哈希都添加了盐。

问题很可能是密码的数据库列名。如果它是user_passwords - 那么你必须在你的用户模型中设置它,否则它将不起作用(Laravel会认为它是password否则)

因此,$credentials必须使用password字段,而不是user_password

$credentials = array(
            'user_email' => Input::get('UserName'),
            'password' => Input::get('Password')
        );

如果您的用户数据库在名为' password'的列中有密码。那你就不需要再做任何事了。但是,如果您的专栏被调用' user_password' - 然后你必须修改你的User模型并添加/修改以下功能:

现在在用户模型(app / models / User.php)文件中,您需要添加以下功能:

public function getAuthPassword() {
    return $this->user_password;
}

答案 1 :(得分:1)

同一秘密的新哈希每次都会有所不同,因为在散列时添加了随机盐。检查哈希使用的秘密:

Hash::check('secret', 'hash-of-secret');

Auth::attempt失败的原因是传递的凭据始终需要password密钥。 (即使您的数据库字段具有不同的名称)

$credentials = array(
    'user_email' => Input::get('UserName'),
    'password' => Input::get('Password')
);

然后确保您的User模型实现此方法:

public function getAuthPassword()
{
    return $this->user_password;
}