在凭据中设置用户的活动状态,并仍在Laravel 5.1中返回激活消息

I wanted to find out how I would do as requested in the subject line, as the code below works fine but the user is logged in before checking the $user->Activated status. Here is some code to illustrate:

AuthController

public function authenticated(Request $request, User $user)
{
    if ($user->Activated) {
        return redirect()->intended($this->redirectPath());
    } else {
        Auth::logout();
        return redirect($this->loginPath())
            ->withInput($request->only('email', 'remember'))
            ->withErrors([
                'activated' => 'You need to activate your account to login'
            ]);
    }
}

Preferably I would like to do the following:

AuthController

public function getCredentials(Request $request)
{
    $credentials = $request->only($this->loginUsername(), 'password');

    return array_add($credentials, 'Activated', '1');
}

But then the only message that gets returned is "These credentials do not match our records.", instead of "You need to activate your account to login". Also how would I update a LoginStatusId once the user is logged in, currently I do it like this:

AuthController

public function authenticated(Request $request, User $user)
{
    if ($user->Activated) {
        $user->LoginStatusId = 1;
        $user->save();
        return redirect()->intended($this->redirectPath());
    } else {
        Auth::logout();
        return redirect($this->loginPath())
            ->withInput($request->only('email', 'remember'))
            ->withErrors([
                'activated' => 'You need to activate your account to login'
            ]);
    }
}

Is there a better place to set the $user->LoginStatusId once they login, or is this the best place to put it?

Open this file vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php

Add this block of code inside postLogin

// If activated is equal to 1, user allowed to login or throw an credential mismatch error

$userData = User::select('activated')->where('email', $request['email'])->first();

if ($userData->activated == 1) {
    $request['activated'] = $activated;
}

$credentials = $this->getCredentials($request); //add these code before this line

And add 'activated' to getCredentials method. It will look like this:

protected function getCredentials(Request $request)
{
    return $request->only($this->loginUsername(), 'password', 'activated');
}

You can check user login status anywhere just using this Auth::user(). No need to store login status by yourself. As example in any controller you can write this:

if(Auth::user()){
    // do this;
}else{
    // do that;
}