Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在laravel 5.6中进行自定义登录?_Php_Laravel 5 - Fatal编程技术网

Php 如何在laravel 5.6中进行自定义登录?

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'=> '

我使用了自己的自定义登录,但没有使用auth。这是我的密码

 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是否包含任何数据。如果它不返回任何内容或为空,则使用用户不退出的消息重定向。您能否向代码中添加一些解释,以便其他人可以从中学习?