Laravel Airlock, как возвращать разные ответы на неаутентифицированные веб-запросы и запросы API

Я разрабатываю мобильное приложение и веб-сайт с помощью laravel + react native.

Когда вы отправляете запрос на маршрут с помощью промежуточного программного обеспечения «auth: airlock», если вы передаете неправильный токен Bearer, он перенаправляет вас на страницу / login. Я хочу вернуть ответ («Не аутентифицировано», 403). Но в то же время я хочу продолжать перенаправлять неаутентифицированных пользователей на страницу входа в систему для моих веб-пользователей.

Итак, я хочу добиться:

  • Когда неаутентифицированные веб-пользователи пытаются просмотреть: domain.com/settings, он будет перенаправлен на страницу domain.com/login.

  • Когда запрос приходит на domain.com/api/settings, если в запросах нет токена-носителя или неверный токен-носитель, ответ будет json.


person haberimyok    schedule 15.03.2020    source источник


Ответы (2)


Я бы сказал, что самое чистое решение - отправить запрос от вашего React Native как ("application / json"). В этом случае Laravel определит, что это вызов API, и не будет перенаправлять на route("login")

Вот отрывок из App\Http\Middleware\Authenticate:

/**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
person Mina Abadir    schedule 17.03.2020

Решение:

Новый маршрут в api.php:

Route::get("/unauthenticated", function(Request $request) {
    return response("Unauthenticated", 403);
})->name("unauthenticated");

Отредактируйте в промежуточном программном обеспечении Authenticate.php:

    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            if($request->is("api/*")) {
                return route("unauthenticated");
            }
            return route('login');
        }
    }
person haberimyok    schedule 15.03.2020