首頁  >  問答  >  主體

如何將自訂錯誤訊息從 LoginController 傳送到前端?

我在 LoginController 中新增了一項檢查來限制使用者連接裝置的最大數量。

我在 LoginControllerlogin() 方法中加入了以下內容:

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粉101708623P粉101708623422 天前685

全部回覆(1)我來回復

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

    回覆
    0
  • 取消回覆