Maison  >  Questions et réponses  >  le corps du texte

Comment envoyer un message d'erreur personnalisé de LoginController au frontend ?

J'ai ajouté un check-in LoginController pour limiter le nombre maximum d'appareils connectés pour un utilisateur.

J'ai ajouté ce qui suit dans la méthode LoginControllerlogin()login() de

 :

public function login(Request $request)
{
    // ... some code ...

    if ($this->attemptLogin($request)) {
        $user = Auth::user();
        if ($user->max_devices >= 5) {
            // if I dd() instead of returning this, it gets here
            return $this->sendMaxConnectedDevicesResponse($request);
        }
    }

    // ... some code ...
}

protected function sendMaxConnectedDevicesResponse(Request $request)
{
    throw ValidationException::withMessage([$this->username() => ['Device limit reached'])->status(403);
}
sendMaxConnectedDevicesResponse 是带有我的自定义消息的 sendLockoutResponse mais je reçois un avertissement indiquant que j'ai une exception non gérée (< /代码>Unhandled IlluminateValidationValidationException

).

sendLockoutResponseAlors, comment puis-je le gérer comme

sendLockoutResponse
le gère pour qu'il apparaisse comme une erreur sur le frontend au lieu de simplement l'ignorer ? Maintenant, ce qui se passe, c'est que même s'il renvoie l'erreur, il ne l'affiche pas sur le frontend et continue de se connecter comme d'habitude

Je n'ai tout simplement pas trouvé de moyen de lancer et de détecter correctement les erreurs personnalisées🎜
P粉101708623P粉101708623422 Il y a quelques jours686

répondre à tous(1)je répondrai

  • P粉052686710

    P粉0526867102023-09-17 11:34:34

    Dans un de mes projets, j'ai utilisé ceci

    throw ValidationException::withMessages([
        'key' => 'error message',
    ]);

    Dans votre, vous pouvez utiliser

    throw ValidationException::withMessages([
        'device_limit' => 'Device limit reached',
    ]);

    Donc, sur le frontend, vous pouvez utiliser device_limit 键获取错误。


    Dans votre contrôleur de connexion

    use Illuminate\Http\Request;
    use Illuminate\Http\Exceptions\HttpResponseException;
    
    class LoginController extends Controller
    {
        use AuthenticatesUsers;
    
        protected function authenticated(Request $request, $user)
        {
            if ($user->max_devices >= 5) {
                // Logout the user right after login
                $this->guard()->logout();
    
                // Throw an instance of HttpResponseException
                throw new HttpResponseException(
                    response()->json(['error' => 'Device limit reached'], 403)
                );
            }
        }
    }

    répondre
    0
  • Annulerrépondre