2017-06-08 248 views
1

我喜欢用户通过公司名称,用户名和密码登录 - 他们需要输入所有这些字段。Laravel Auth按公司名称,用户名和密码登录

usernamepassword字段在users表中。 company_namecompanies表中。

username可以在users表中复制,但每个用户名属于不同的公司名称。 company_idusers表中定义。

如何对公司名称,用户名和密码进行验证?

我看了一下attemptLogin()方法。

protected function attemptLogin(Request $request) 
    { 
     return $this->guard()->attempt(
      $this->credentials($request), $request->has('remember') 
     ); 
    } 

我不能覆盖这个,因为我需要通过属于公司的特定用户,然后进行身份验证检查。

更新:

protected function authenticated(Request $request, User $user) 
{ 
    if (!$user->enable) { 
     Auth::logout(); 

     return redirect('/login')->with('status', 'Account is disabled'); 
    } 

    return redirect()->intended('/'); 
} 

回答

1

由于usernamecompany_name对是独一无二的,你可以这样做:

protected function attemptLogin(Request $request) 
{ 
    $user = User::where('username', $request->username) 
     ->where(function ($q) use ($request) { 
      q->whereHas('company', function ($q) use ($request) { 
       $q->where('company_name', $request->company_name); 
      }) 
      ->orWhereHas('warehouse', function ($q) use ($request) { 
       $q->where('company_name', $request->company_name); 
      }); 
     }) 
     ->first(); 

    return !is_null($user) && \Hash::check($request->password, $user->password)); 
} 

protected function validateLogin(Request $request) 
{ 
    $this->validate($request, [ 
     'company_name' => 'required', 
     'username' => 'required|string', 
     'password' => 'required|string', 
    ]); 
} 
+0

我忘了在用户表中提到它可以是company_id或warehouse_id。如果company_id为空,那么检查warehouse_id对'warehouses'表,它也有'company_name' –

+0

如果你希望它很好,干净,请自行警惕并关注'attempt()'方法。 – Kyslik

+1

@ I'll-Be-Back您正在贪婪...... – Kyslik

-2

可以DIY的登录请求或控制器,例如像

// find user 
$user = User::where... 

// check user 
// ... 

// make he login 
auth()->login($user); 

另外,如果你在用户表中的company_id场。

它属于一对一的雄辩关系。

https://laravel.com/docs/5.4/eloquent-relationships#one-to-one


所以,你可以用这个方法。

$user_company_name = User::first()->company_name; 

你可能会检查这个东西。

+0

为什么投我的承诺?那有什么问题? – gclove

+0

因为你的答案远离溶剂,而且不可用。 – Kyslik