我在我的项目中使用 Laravel sanctum 以 angular 作为前端。从第二个 api 请求中获取未经身份验证。请让我知道我哪里错了
前端-> 127.0.0.1:4200
后端-> 本地主机:8888
.env 配置
SESSION_DOMAIN=localhost SANCTUM_STATEFUL_DOMAINS=127.0.0.1
将中间件auth:sanctum添加到 api.php 中的路由组
我在我的项目中使用 Laravel sanctum 以 angular 作为前端。从第二个 api 请求中获取未经身份验证。请让我知道我哪里错了
前端-> 127.0.0.1:4200
后端-> 本地主机:8888
.env 配置
SESSION_DOMAIN=localhost SANCTUM_STATEFUL_DOMAINS=127.0.0.1
将中间件auth:sanctum添加到 api.php 中的路由组
对于遇到未经身份验证的错误的任何人,请确保您遵循这些步骤。
完成此步骤后,您将通过API 路由中的auth:sanctum中间件成功进行身份验证。
其他需要注意的事项:
对于原始问题,请确保您保持相同的域。我的意思是两者都使用 localhost 。并设置 SANCTUM_STATEFUL_DOMAIN = localhost:4200
已编辑
同时设置 SESSION_DRIVER
添加您的域,例如我的 API 在 localhost:8000 上运行我的客户端在 localhost:3000 上运行所以我的环境设置如下所示
SANCTUM_STATEFUL_DOMAINS=localhost:8000,localhost:3000
另外,添加您的会话域
SESSION_DOMAIN=localhost
从您共享的屏幕截图中,我看到您的域是 localhost 而不是 127.0.01,只需执行以下操作:
SANCTUM_STATEFUL_DOMAINS=localhost
对于使用 Laravel Homestead 的任何人,请使用您的实际域。
SANCTUM_STATEFUL_DOMAINS=homestead.test
你检查过你的 Kernel.php 吗?app/Http/Kernel.php
确保您取消注释\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
,因为默认情况下它正在被评论
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
两天的痛苦和绝望得出了这个结论:Bearer 令牌没有附加到请求中,那是因为我的 .htaccess 配置。
如果你和我一样无法通过 API 令牌进行身份验证,请尝试在 Laravel 项目的公共目录中的 .htaccess 文件中添加这一行:
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
就在RewriteEngine On
指令之后。
例如SANCTUM_STATEFUL_DOMAINS=127.0.0.1:4200
尽管在您的情况下,您的屏幕截图显示它应该是SANCTUM_STATEFUL_DOMAINS=127.0.0.1:4201
我有与 Marco 相同的解决方案,将重写规则添加到我的 htaccess 在公共修复它。
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
仅供参考,如果其他人正在这样做,我将在 Auzre Web App Service (linux) 上托管它。