I like user to login by company name, username, and password - they need to enter all those fields.
username
, and password
fields are in the users
table.
company_name
are in the companies
table.
username
can be duplicated in the users
table but each username is belong to different company name. company_id
is defined in users
table.
How can I Auth against company name, username, and password?
I had a look at the attemptLogin()
method.
protected function attemptLogin(Request $request)
{
return $this->guard()->attempt(
$this->credentials($request), $request->has('remember')
);
}
I can't override this because I need to pass specific user that is belong to company then do auth check.
Update:
protected function authenticated(Request $request, User $user)
{
if (!$user->enable) {
Auth::logout();
return redirect('/login')->with('status', 'Account is disabled');
}
return redirect()->intended('/');
}
Since username
and company_name
pair is unique, you can do this:
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',
]);
}