我在 LoginController
中新增了一項檢查來限制使用者連接裝置的最大數量。
我在 LoginController
的 login()
方法中加入了以下內容:
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
的副本,但是我收到警告,提示我有未處理的例外(Unhandled \Illuminate\ Validation\ValidationException< /代码>)。
那麼我該如何像 sendLockoutResponse
處理它一樣處理它,這樣它就會在前端顯示為錯誤,而不是僅僅忽略它?現在,發生的情況是,即使它拋出錯誤,它也不會在前端顯示它,並且繼續照常登入
我只是沒有找到正確拋出和捕獲自訂錯誤的方法
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) ); } } }