Sanctum 和 Postman 的 SPA 身份验证问题

时间:2020-12-28 16:14:17

标签: laravel postman laravel-8 laravel-sanctum

我目前正在尝试使用 Laravel 8.19.0 和 Postman 7.36.1 测试 SPA,但我不断收到来自“auth:sanctum”保护的路由的“未经身份验证”响应,即使我已正确登录.

据我所知,我完全遵循了 https://laravel.com/docs/8.x/sanctum 处的文档 为了将 Sanctum 设置为用于 SPA,我做了以下工作:

  • 安装了 Sanctum。
  • 发布了 Sanctum 配置。
  • 执行了迁移。
  • 在 Http 内核中包含了 EnsureFrontendRequestsAreStateful 中间件和“EnsureFrontendRequestsAreStateful::class”。
  • 将我的本地域(相同的顶级域,但 1 个带有“测试”子域,另一个带有“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 在第 63 行,因为 $this->user() 对于 Illuminate\Auth\RequestGuard 实例为 null。

对于要检查的事情的任何帮助甚至想法都将不胜感激,因为我不确定从这里开始做什么,没有花一天时间深入研究请求保护对象及其实例!

谢谢。

1 个答案:

答案 0 :(得分:1)

问题已经解决,原因是 Postman 在登录后仅将“XSRF-TOKEN”和“laravel_session”cookie 保存到“test”子域(登录 URL 使用了该子域),因此没有将它们传递给尝试访问受“auth:sanctum”保护的路由时的“api”子域。通过 Postman 中的“管理 Cookie”菜单将相同的 cookie 添加到“api”子域,现在可以按预期访问该路由。