Php 如何在laravel 5.6中进行自定义登录?
我使用了自己的自定义登录,但没有使用auth。这是我的密码Php 如何在laravel 5.6中进行自定义登录?,php,laravel-5,Php,Laravel 5,我使用了自己的自定义登录,但没有使用auth。这是我的密码 public function userLogin(Request $request){ if($request->isMethod('post')){ $data = $request->input(); $this->validate($request, [ 'uemail'=> 'required|email', 'user_type'=> '
public function userLogin(Request $request){
if($request->isMethod('post')){
$data = $request->input();
$this->validate($request, [
'uemail'=> 'required|email',
'user_type'=> 'required',
'user_id' => 'required',
'upassword' => 'required|min:6',
],
[
'uemail.email' => 'Email must be valid',
'uemail.required' => 'Email is required',
'user_type.required' => 'Type is required',
'user_id.required' => 'Name is required',
'upassword.required' => 'Password is required',
'upassword.min' => 'Password must be at least 6 characters',
]);
$user_type = $data['user_type'];
$user_id = $data['user_id'];
$uemail = $data['uemail'];
$upassword = $data['upassword'];
$hashPass = bcrypt($upassword);
DB::enableQueryLog();
$user1 = User::where('type',$user_type)->where('user_id',$user_id)->where('email',$uemail)
->where('status',1)->where('deleted_at',null)->firstOrFail();
$user = DB::table('users')->where('type',$user_type)->where('user_id',$user_id)->where('email',$uemail)
->where('status',1)->where('deleted_at',null);
// $query = DB::getQueryLog();
// $query = end($query);
$isPasswordCorrect = Hash::check($upassword, $user1->password);
if($user == null){
echo "Failed"; die;
}
if($user->exists() && $isPasswordCorrect){
echo "Success"; die;
Session::put('userSession',$user1->email);
Session::put('loginSession',$user_type);
Session::put('idSession',$user1->user_id);
return redirect('/user/dashboard');
} else {
return redirect('/user')->>with('flash_message_error','Invalid Login Credentials..');
}
}
return view('death_notice.user_login');
}
这是我的登录功能。但它不起作用。当凭证正确时,它会重定向到仪表板,即正确,但当电子邮件、密码或其他凭证错误时,它会显示错误消息。但如果用户输入的数据不在数据库中,则必须显示用户不存在的消息。但它将转到页面未找到错误
我想找到这个问题的解决方案。好的,首先确认您在web中定义了类似“/user”的路由。php使用以下代码自定义登录。它是用于Ajax登录的,您可以根据自己的需求进行修改
function userLogin(Request $request)
{
$auth = false;
$credentials = $request->only('email', 'password');
// if user login credentials are correct then users logged in
if (Auth::attempt($credentials, $request->has('remember')))
{
$auth = true; // Success
}
// returns json response if login credentials are correct.
if ($auth == true)
{
return response()->json([
'auth' => $auth,
'intended' => URL::previous(),
'msg'=>1,
'name' => Auth::user()->name
]);
} else { // returns json response if login credentials are incorrect
return response()->json(['msg' => 2]);
}
}
您没有在$user
中使用过get()
$user = DB::table('users')->where('type',$user_type)->where('user_id',$user_id)->where('email',$uemail)
->where('status',1)->where('deleted_at',null)->get();
它显示404未找到
错误,因为您使用了firstorFail()
它将在没有记录匹配时失败,并将显示404未找到
错误
$user1 = User::where('type',$user_type)->where('user_id',$user_id)->where('email',$uemail)
->where('status',1)->where('deleted_at',null)->first();
if(empty($user1))
{
echo "user doesn't exists";exit;
}
根据我的理解,查询
$user
和$user1
是相同的,因此我建议只使用一个我做了以下更正:
$data=$request代码>就足够了,您不需要执行$data=$request->input()代码>
count($users->get())
,以检查是否找到了用户
public function userLogin(Request $request){
if($request->isMethod('post')){
$data = $request->input();
$this->validate($request, [
'uemail'=> 'required|email',
'user_type'=> 'required',
'user_id' => 'required',
'upassword' => 'required|min:6',
],
[
'uemail.email' => 'Email must be valid',
'uemail.required' => 'Email is required',
'user_type.required' => 'Type is required',
'user_id.required' => 'Name is required',
'upassword.required' => 'Password is required',
'upassword.min' => 'Password must be at least 6 characters',
]);
$user_type = $data['user_type'];
$user_id = $data['user_id'];
$uemail = $data['uemail'];
$upassword = $data['upassword'];
$hashPass = bcrypt($upassword);
DB::enableQueryLog();
$user1 = User::where('type',$user_type)->where('user_id',$user_id)->where('email',$uemail)
->where('status',1)->where('deleted_at',null)->firstOrFail();
$users = DB::table('users')->where('type',$user_type)->where('user_id',$user_id)->where('email',$uemail)
->where('status',1)->where('deleted_at',null);
// $query = DB::getQueryLog();
// $query = end($query);
$isPasswordCorrect = Hash::check($upassword, $user1->password);
if(count($users->get()) == 1){
$user1 = $users->first();
$isPasswordCorrect = Hash::check($upassword, $user1->password);
echo "Success"; die;
Session::put('userSession',$user1->email);
Session::put('loginSession',$user_type);
Session::put('idSession',$user1->user_id);
return redirect('/user/dashboard');
} else {
return redirect('/user')->>with('flash_message_error','Invalid Login Credentials..');
}
}
return view('death_notice.user_login');
}
我没有测试代码,但是想法应该很清楚。您的routeRoute::match(['get','post'],'/user','UserController@userLogin');然后检查$user1是否包含任何数据。如果它不返回任何内容或为空,则使用用户不退出的消息重定向。您能否向代码中添加一些解释,以便其他人可以从中学习?