Heim  >  Fragen und Antworten  >  Hauptteil

Wie sende ich eine benutzerdefinierte Fehlermeldung von LoginController an das Frontend?

Ich habe einen Check-in hinzugefügt LoginController, um die maximale Anzahl verbundener Geräte für einen Benutzer zu begrenzen.

Ich habe Folgendes in LoginControllerlogin()s

login()-Methode hinzugefügt:

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 是带有我的自定义消息的 sendLockoutResponseaber ich erhalte eine Warnung, dass ich eine nicht behandelte Ausnahme habe (< /代码>Unhandled IlluminateValidationValidationException

).

sendLockoutResponseWie gehe ich also damit um, so wie

sendLockoutResponse
damit umgeht, sodass es als Fehler im Frontend angezeigt wird, anstatt es einfach zu ignorieren? Was nun passiert, ist, dass es, selbst wenn der Fehler ausgegeben wird, ihn nicht im Frontend anzeigt und sich weiterhin wie gewohnt anmeldet

Ich habe einfach keine Möglichkeit gefunden, benutzerdefinierte Fehler richtig auszulösen und abzufangen🎜
P粉101708623P粉101708623420 Tage vor684

Antworte allen(1)Ich werde antworten

  • P粉052686710

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

    在我的一个项目中,我使用了这个

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

    在你的中,你可以使用

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

    因此,在前端,您可以使用 device_limit 键获取错误。


    在您的登录控制器中

    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)
                );
            }
        }
    }

    Antwort
    0
  • StornierenAntwort