我有一个简单的网络应用程序,对我的所有网络路由使用常规身份验证。我的应用程序中只有几个地方我希望能够从 Javascript 调用一些 API 路由。我可以在不进行 SPA 样式登录的情况下设置 Sanctum 的 SPA 身份验证吗?
我已按照服务器端的说明进行操作,并且在用户使用标准路由登录之前,在我的登录页面上,我正在使用 axios 库执行 CSRF cookie 请求。但是,当我尝试点击 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
在我的请求中为 null,因此此函数无法返回 true。如果将“referer”更改为“host”,它就可以工作。这可以接受吗?它是否仍然满足功能的要点,即“给定的请求来自第一方应用程序前端”还是我没有考虑到安全隐患?