【发布时间】:2021-04-05 09:35:45
【问题描述】:
我目前正在尝试使用 Laravel 8.19.0 和 Postman 7.36.1 测试 SPA,但我不断从由“auth:sanctum”保护的路线收到“未经身份验证”的响应,即使我已正确登录.
据我所知,我已完全按照https://laravel.com/docs/8.x/sanctum 的文档进行操作 为了将 Sanctum 设置为用于 SPA,所以我做了以下操作:
- 安装 Sanctum。
- 发布了 Sanctum 配置。
- 执行了迁移。
- 将 EnsureFrontendRequestsAreStateful 中间件和“
EnsureFrontendRequestsAreStateful::class”包含到 Http 内核中。 - 将我的本地域(相同的顶级域,但 1 个带有“test”子域,另一个带有“api”)添加到 Sanctum 配置文件中的“有状态域”选项。
- 将 cors 配置中的“supports_credentials”选项设置为“true”。
- 设置我的顶级域,以“.”为前缀对于会话配置中的“域”选项。
然后,我使用https://blog.codecourse.com/laravel-sanctum-airlock-with-postman/ 的指南设置了 Postman 所以我编写了一个脚本来从“/sanctum/csrf-cookie”获取 CSRF 令牌,然后使用该令牌作为请求标头中“X-XSRF-TOKEN”的值,然后我可以成功登录。但是,当我随后尝试访问由“auth:sanctum”保护的路由时,即使在请求标头中设置了引荐来源和“X-XSRF-TOKEN”,我也无法访问该路由.
调试后,我可以看到$this->auth->guard($guard)->check() 在authenticate($request, array $guards) 方法中返回false,其中$guard = "sanctum" 在\vendor\laravel\framework\src\Illuminate\Auth\Middleware\Authenticate.php em> 在第 63 行,因为对于 Illuminate\Auth\RequestGuard 实例,$this->user() 为空。
任何关于检查的帮助甚至想法都将不胜感激,因为我不确定从这里做什么,没有花一天时间深入研究请求保护对象及其实例!
谢谢。
【问题讨论】:
标签: laravel postman laravel-8 laravel-sanctum