【问题标题】:Laravel 4 AuthenticationLaravel 4 身份验证
【发布时间】:2013-09-09 17:24:21
【问题描述】:

我无法让身份验证与 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;
}

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

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

【问题讨论】:

  • 你为什么在Auth::attempt()之前这样做? $pass = base64_encode($password); 不需要!
  • 因为当他们注册一个帐户时,它会生成一个密码,将密码发送到他们的电子邮件,它将密码转换为 base64 并作为 base64 字符串放入数据库中......当他们登录时,他们在密码框中输入的纯文本被转换为 base64,因此它可以检查数据库中的 base64 值
  • 好的,laravel 期望密码是 BCrypted.. 所以在创建密码时不要使用 base_64'ing 密码,而是在将密码存储到数据库之前使用 Hash::make($password)。然后您可以使用Auth::attempt() 和您的用户输入的纯文本密码。
  • 已经解决了,非常感谢。如果你把它放在一个正确的答案中,我会接受它并为你投票
  • 干杯!在下面添加:)

标签: php authentication laravel laravel-4


【解决方案1】:

除非您在 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();

然后您可以尝试不经过哈希处理。

【讨论】:

  • 我在 save() 的密码上使用了 base64_encode,还有其他建议吗?
【解决方案2】:

根据您的 cmets...

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 1970-01-01
      • 2016-02-05
      • 2015-07-22
      • 2013-09-11
      • 2014-03-30
      • 2013-04-17
      • 2014-07-19
      • 2014-09-07
      相关资源
      最近更新 更多