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
Avoir ceci sur votre LoginController:
protected function credentials(Request $request)
{
return ['username' => $request->{$this->username()}, 'password' => $request->password, 'status' => 1];
}
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
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.');
}
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.
}
}
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é.