大家好
我的问题是我们如何在 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');
}
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 请求与存储的密码进行匹配时,它显示错误 请帮助我,谢谢
它不起作用,因为您正在比较不正确的哈希的字符串结果。
更改您的注册功能
$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 内置的哈希功能在注册时生成哈希并计算哈希在登录期间是否有效。
将您的代码更改为此。
$data = Register::where('email' , $request->email)
->where('password' ,bcrypt($request->password))
->exists();