Heim > Fragen und Antworten > Hauptteil
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 LoginController
的 login()
s
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
aber ich erhalte eine Warnung, dass ich eine nicht behandelte Ausnahme habe (< /代码>Unhandled IlluminateValidationValidationException).
sendLockoutResponse
Wie 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粉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) ); } } }