【发布时间】: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