9

我在我的项目中使用 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 中的路由组

参考: https ://prnt.sc/rm9ejy

4

9 回答 9

8

对于遇到未经身份验证的错误的任何人,请确保您遵循这些步骤。

  • 向 /sanctum/csrf-cookie 发送 GET 请求
  • 向 web 路由 /login 发送 post 请求以进行身份​​验证

完成此步骤后,您将通过API 路由中的auth:sanctum中间件成功进行身份验证。

其他需要注意的事项:

  1. 确保您的 SESSION_DOMAIN 设置为localhost
  2. SANCTUM_STATEFUL_DOMAIN 设置为带有端口的子域/SPA,例如 localhost:8000

对于原始问题,请确保您保持相同的域。我的意思是两者都使用 localhost 。并设置 SANCTUM_STATEFUL_DOMAIN = localhost:4200

已编辑

同时设置 SESSION_DRIVER

于 2020-10-18T21:18:35.933 回答
6

添加您的域,例如我的 API 在 localhost:8000 上运行我的客户端在 localhost:3000 上运行所以我的环境设置如下所示

SANCTUM_STATEFUL_DOMAINS=localhost:8000,localhost:3000

另外,添加您的会话域

SESSION_DOMAIN=localhost
于 2021-05-25T18:54:38.503 回答
4

从您共享的屏幕截图中,我看到您的域是 localhost 而不是 127.0.01,只需执行以下操作:

SANCTUM_STATEFUL_DOMAINS=localhost
于 2020-03-31T19:24:50.687 回答
3

对于使用 Laravel Homestead 的任何人,请使用您的实际域。

SANCTUM_STATEFUL_DOMAINS=homestead.test
于 2020-06-02T19:38:43.827 回答
3

你运行的是哪个版本?从 V2.4.0 开始,您需要指定端口:

SANCTUM_STATEFUL_DOMAINS=localhost:4200

有关更多信息,请参阅此问题

于 2020-07-01T08:29:34.273 回答
3

你检查过你的 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,
],
于 2021-11-01T16:20:23.667 回答
1

两天的痛苦和绝望得出了这个结论:Bearer 令牌没有附加到请求中,那是因为我的 .htaccess 配置。

如果你和我一样无法通过 API 令牌进行身份验证,请尝试在 Laravel 项目的公共目录中的 .htaccess 文件中添加这一行:

RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

就在RewriteEngine On指令之后。

学分:Laravel 未检测到标头和 JWT 包中发送的身份验证令牌

于 2020-11-18T10:11:16.803 回答
0

sanctum 有状态域也需要端口号。

例如SANCTUM_STATEFUL_DOMAINS=127.0.0.1:4200

尽管在您的情况下,您的屏幕截图显示它应该是SANCTUM_STATEFUL_DOMAINS=127.0.0.1:4201

于 2021-08-18T16:14:41.033 回答
0

我有与 Marco 相同的解决方案,将重写规则添加到我的 htaccess 在公共修复它。

RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

仅供参考,如果其他人正在这样做,我将在 Auzre Web App Service (linux) 上托管它。

于 2021-11-01T12:43:21.937 回答