我很难让身份验证与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;
}即使电子邮件和密码在数据库中的同一行,它仍然返回登录失败,想知道是否有人能对这种情况有所了解?
如果我遗漏了其他重要的细节,请告诉我,我会马上把它们发出去。提前谢谢。
发布于 2013-09-05 19:30:54
根据你的评论..。
在创建$user时,在将密码保存到数据库中之前,请使用Hash::make($password)使用BCrypt散列密码。
然后,当用户登录时只使用Auth::attempt($credentials),但不要使用base_64对其进行加密,那么Auth方法将为您完成这一切!
更多关于优秀的Laravel文档:http://laravel.com/docs/security
发布于 2013-09-05 19:03:25
除非您已经在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-11 13:02:47
下面是我写的一个教程,这可能会有帮助!
https://stackoverflow.com/questions/18643736
复制相似问题