У меня есть простое веб-приложение, использующее обычную аутентификацию для всех моих веб-маршрутов. В моем приложении есть несколько мест, где я хочу иметь возможность вызывать несколько маршрутов API с Javascript. Могу ли я настроить SPA-аутентификацию Sanctum для работы без входа в стиле SPA?
Я следовал инструкциям на стороне сервера, и на своей странице входа я выполняю запрос CSRF cook ie с использованием топора ios библиотека перед входом пользователя по стандартным маршрутам. Но когда я пытаюсь перейти по защищенному маршруту Sanctum, меня просто перенаправляют на домашнюю страницу.
Ожидается ли, что основанная на сеансе аутентификация Sanctum будет работать с обычным входом в приложение?
Редактировать
Я нашел проблему. В EnsureFrontendRequestsAreStateful
есть эта функция:
public static function fromFrontend($request)
{
$referer = Str::replaceFirst('https://', '', $request->headers->get('referer'));
$referer = Str::replaceFirst('http://', '', $referer);
return Str::startsWith($referer, config('sanctum.stateful', [])) ||
Str::is(config('sanctum.stateful', []), $referer);
}
$referer
пусто по моим запросам, поэтому эта функция не может вернуть true. Если 'referer' изменен на 'host', он работает. Это приемлемо? Удовлетворяет ли он еще смысл функции: «данный запрос поступил от внешнего интерфейса приложения» или есть какие-то последствия для безопасности, которые я не рассматривал?