2016-12-06 80 views
0

大家好 我的问题是我们如何验证我们的电子邮件和密码在laravel 5.3? 这里我不使用验证,我想创建手动
登录系统这是用户注册方法
public function post_register(Request $request){ $this->validate($request , [ 'username' => 'required|' , 'email' => 'required|email|unique:registers' , 'password' => 'required|min:6', 'cp' => 'required|same:password']); $data = new Register; $data->username = $request->username; $data->email = $request->email; $data->password = bcrypt($request->password); $data->save(); return Redirect::back()->with('success' , 'user registred'); }

这是登录方法
如何使用laravel 5.3手动验证电子邮件和密码?

public function post_login(Request $request){ 
    $this->validate($request , [ 
     'email' => 'required|email' , 
     'password' => 'required']); 

$data = Register::where('email' , $request->email)->exists(); 
if($data){ 
    Session::put('email' , $request->email); 
    return Redirect::to('profile'); 

} 
else{ 
    return Redirect::to('login'); 

} 

此代码工作,但问题是,如果我输入注册的电子邮件和未注册的密码,那么它重定向到个人资料页面。 我不能够因为我在密码中使用bcrypt()散列函数与电子邮件和密码来验证用户,当我尝试匹配与存储密码的HTTP请求时,它显示错误 请帮我,谢谢

+0

您可以在登录时对密码进行加密,然后检查它是否正确?如果我理解正确,唯一出错的是密码检查。 – Loek

+0

那我现在该做什么?我如何检查电子邮件和密码? –

+0

您可以重写您的查询以检查电子邮件和密码,或者获取用户和手动检查数据库中的密码和请求匹配。 'if(data) - > if(bcrypt(request-> password)=== $ data-> password' in pseudocode – Loek

回答

1

它不会工作,因为你比较了散列的字符串结果是不正确的。

更改您注册功能

$data->password = Hash::make($request->password); 

改变你的登录功能

public function post_login(Request $request){ 
    $this->validate($request , [ 
     'email' => 'required|email' , 
     'password' => 'required']); 

    $data = Register::where('email' , $request->email)->first(); 
    if($data){ 
     if(Hash::check($request->password, $data->password)){ 
      Session::put('email' , $request->email); 
      return Redirect::to('profile'); 
     } 
    } 
    return Redirect::to('login'); 
} 

说明

这些变化让你使用Laravel内建在根散列功能在注册时对散列进行散列&计算散列在登录期间是否有效。

+0

userController.php中的ErrorException异常第55行: 试图获取非对象的属性..这个错误显示在页面 –

+0

我刚刚意识到这个问题。尝试更改'exists()'到'first()' – scottevans93

+0

我试过先生,这次它不显示任何错误并重定向回登录 –

0

更改代码到这。

$data = Register::where('email' , $request->email) 
       ->where('password' ,bcrypt($request->password)) 
       ->exists(); 
+0

它不工作先生 –

+0

你可以'因为每次运行'bcrypt()'时都会使用硬盐,所以检查一个'bcrypt()'结果对于字符串。每次产生差值字符串,需要计算 – scottevans93

相关问题