Laravel Airlock как вернуть разные ответы на неаутентифицированные веб-запросы и запросы API
Я разрабатываю мобильное приложение и веб-сайт с помощью laravel + react native.
Когда вы отправляете запрос на маршрут с помощью промежуточного программного обеспечения "auth:airlock", если вы передаете неправильный токен Bearer, он перенаправляет вас на страницу /login. Я хочу вернуть ответ ("Неаутентифицирован", 403). Но в то же время я хочу продолжать перенаправлять неаутентифицированных пользователей на страницу входа в систему для моих веб-пользователей.
Итак, я хочу добиться:
Когда неаутентифицированные веб-пользователи пытаются просмотреть: domain.com/settings, он будет перенаправлен на страницу domain.com/login.
Когда запрос приходит на domain.com/api/settings, если в запросах нет токена Bearer или неверный токен Bearer, ответ будет json.
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');
}
}
Решение:
Новый маршрут в 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');
}
}