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

时间:2018-10-30 05:16:53

标签: php laravel-5

我使用了自己的自定义登录名而不使用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');
}

这是我的登录功能。但是它不起作用。凭据正确时,它将重定向到仪表板,即正确,但是,如果电子邮件或密码或其他凭据错误,则会显示错误消息。但是,如果用户输入的数据不在数据库中,则它必须显示一条消息,提示用户不存在。但找不到页面错误...

我想解决这个问题。

4 个答案:

答案 0 :(得分:0)

好的,首先确认一下,您在web.php中定义了一条类似于“ / user”的路由

答案 1 :(得分:0)

您还没有用过get()雄辩的$user

$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 not found错误,因为您使用过firstorFail(),它将在没有记录匹配时失败,并显示404 not found错误,因此

$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是相同的,所以我的建议是仅使用一个

答案 2 :(得分:0)

我做了以下更正:

  1. $data = $request;就足够了,您不需要$data = $request->input();
  2. 检查像这样的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');
    }
    

我还没有测试代码,但是想法应该很清楚。

答案 3 :(得分:-1)

使用以下代码自定义登录。用于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]);            
    }
}