0

我无法让身份验证与 laravel 4 一起使用。当用户在表单中输入他们的电子邮件和密码时,这是我的全部登录功能。

public function getSignin() {
    $return_arr = array();

    $email = Input::get('email');
    $password = Input::get('password');

    $validation = Validator::make(
                    array(
                'Email' => $email,
                'Password' => $password
                    ), array(
                'Email' => 'required|Email',
                'Password' => 'required'
                    )
    );

    if ($validation->passes()) {
        $pass = base64_encode($password);

        $details = array ('email' => $email, 'password' => $pass);

        if (Auth::attempt($details)) {
            $return_arr['frm_check'] = 'success';
            $return_arr['msg'] = 'logged in';
        } else {
            $return_arr['frm_check'] = 'error';
            $return_arr['msg'] = 'log in failed';
        }
    } else {
        $errors = $validation->messages();
        $return_arr['frm_check'] = 'error';
        $return_arr['msg'] = $errors->first();
    }

    echo json_encode($return_arr);
    $this->layout = null;
    return;
}

即使电子邮件和密码在数据库中的同一行,它仍然返回登录失败,想知道是否有人可以对这种情况有所了解?

如果我错过了任何其他重要细节,请告诉我,我会立即发布。提前致谢。

4

3 回答 3

3

根据您的评论...

创建 $user 时,Hash::make($password)使用 BCrypt 对密码进行哈希处理,然后将其保存到数据库中。

那么,当用户登录时就Auth::attempt($credentials)照你的样子使用,而不是使用base_64加密,Auth方法帮你搞定!

更多关于优秀的 Laravel 文档:http ://laravel.com/docs/security

于 2013-09-05T19:30:54.660 回答
0

除非您在 save() 上对密码进行了 base64 编码,否则请从代码中删除此行:

$pass = base64_encode($password);

并将此编辑为:

$details = array ('email' => $email, 'password' => $password);

Auth::attempt()将使用比base64更安全的东西为你散列它。

编辑:

要正确保存密码,您必须执行以下操作:

$user = new User;
$user->email = 'me@me.com';
$user->password = Hash::make('mySuperSecretPassword');
$user->save();

然后,您可以尝试将其传递给未散列的用户。

于 2013-09-05T19:03:25.747 回答
0

这是我写的教程;这可能会有所帮助!

https://medium.com/on-coding/e8d93c9ce0e2

于 2013-09-11T13:02:47.507 回答