web-dev-qa-db-fra.com

Ne connecter un utilisateur que si son statut est actif dans Laravel 5.7

Je suis nouveau à Laravel et j'ai réussi à implémenter l'authentification d'utilisateur. Maintenant, pour passer à l'étape suivante, je dois autoriser uniquement les utilisateurs dont le statut est actif à se connecter. Pour cela j'ai ajouté un

status TINYINT

colonne dans ma table des utilisateurs mysql.

J'ai trouvé ceci dans la documentation de Laravel:

Spécification de conditions supplémentaires

Si vous le souhaitez, vous pouvez également ajouter des conditions supplémentaires à l'authentification interroger en plus du courrier électronique et du mot de passe de l'utilisateur. Par exemple, nous peut vérifier que l'utilisateur est marqué comme "actif":

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// The user is active, not suspended, and exists.
}

Quelqu'un peut-il s'il vous plaît indiquer où j'ai besoin de mettre ce morceau. Je suis complètement confus et j'ai besoin d'indices.

Merci

4
Debajeet Choudhury

Avoir ceci sur votre LoginController:

protected function credentials(Request $request)
{        
   return ['username' => $request->{$this->username()}, 'password' => $request->password, 'status' => 1];
}
3
kapitan

Il suffit simplement de mettre ce code dans votre App\Auth\LoginController ou ailleurs où vous avez situé votre LoginController.

public function authenticate(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
        // Authentication passed...
        return redirect()->intended('dashboard');
    }
}

avec ce code, vous remplacez la fonction authenticate par défaut

2

Vous prenez juste le statut d'utilisateur et vérifiez que le statut d'utilisateur est vrai ou faux. Vous pouvez prendre status en utilisant Auth :: User () -> status depuis auth session. Essaye ça. 

 if(Auth::attempt(['email'=>$request->email,'password'=>$request->password])){
                $userStatus = Auth::User()->status;
                if($userStatus=='1') {
                    return redirect()->intended(url('/dashboard'));
                }else{
                    Auth::logout();
                    Session::flush();
                    return redirect(url('login'))->withInput()->with('errorMsg','You are temporary blocked. please contact to admin');
                }
            }
            else {

                return redirect(url('login'))->withInput()->with('errorMsg','Incorrect username or password. Please try again.');
            }
2
Jasim Juwel

Ajouter la méthode ci-dessous dans 

app\Http\Controllers\Auth\LoginController.php

et cela s'étendrait 

Authentifie le trait de l'utilisateur

méthode validateLogin. Donc, fondamentalement, cela vérifierait également votre clause active. 

protected function validateLogin(Request $request)
    {
        $this->validate($request, [
            $this->username() => [
                'required',
                Rule::exists('users')->where(function ($query) {
                    $query->where('active', 1);
                }),
            ],
            'password' => 'required'
        ]);
    }

OU 

Placez le code requis dans app\Http\Controllers\Auth\LoginController.php

public function authenticate(Request $request)
{
    if (Auth::attempt(['email' => $request->email, 'password' => $request->password, 'active' => 1])) {
        // The user is active, not suspended, and exists.
    }
}
0
Muhammad Usama

Vous pouvez remplacer la méthode authentifiée () dans votre App\Http\Controllers\Auth\LoginController.php comme suit:

protected function authenticated(Request $request, $user)
{
   if(!$user->active) {
       Auth::logout();
       abort(403);
   };
}

Notez que c'est une solution rapide mais pas très "Laravely". Négligé.

0
Enis P. Aginić