2017-06-08 247 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