Laravel Sanctum auth:sanctum 中间件与 Angular SPA 未经身份验证的响应

Glo*_*ire 4 php laravel angular laravel-sanctum

我有一个具有以下设置的应用程序:

Laravel

主机:appname.local:8000

环境变量:

  • SESSION_DRIVER=数据库
  • SESSION_LIFETIME=480
  • SESSION_CONNECTION=mysql
  • SESSION_DOMAIN=.appname.local
  • SESSION_SECURE_COOKIE=假
  • SESSION_COOKIE=appnameapi_session
  • SANCTUM_STATEFUL_DOMAINS='.appname.local,localhost,127.0.0.1'

主机:appname.local:4200

目前有效的方法:

  • 我可以调用 Sanctum 的 csrf-cookie 端点,它在我的浏览器中设置 CSRF 令牌。
  • 然后我可以调用我的 API 的登录端点来使用 Auth::attempt() 来验证我的 Laravel 应用程序中的用户。这会在会话表中创建一个新条目,如下所示

获取令牌和验证用户的角度方法 获取令牌和登录的角度方法

认证成功后的会话数据库条目 认证成功后的会话数据库条目

什么不起作用:

对受以下中间件保护的路由的后续请求:auth:sanctum都会导致未经身份验证的响应。HTTP 请求永远不会到达我的控制器。

auth:sanctum 保护路由 auth:sanctum 保护路由

但是我可以在开发人员的控制台中看到正在发送 cookie。所以我不明白为什么 Sanctum 不接受认证 在此处输入图片说明

我已经学习了几个教程,但我似乎无法理解为什么 Laravel 的 Authenticate 中间件无法看到我已经对我的用户进行了身份验证。

有谁知道我可能做错了什么?

Glo*_*ire 5

@agm1984 和 @Eden Webstudio 提供的答案非常有用。但是,他们没有解决我的问题。

经过额外的调试,我注意到 sanctum 的守卫逻辑在 config/sanctum.php. 它的默认值为web。我对受保护路由的默认保护是api保护,它是我在身份验证过程中使用的保护。 在此处输入图片说明

使用 'api' 在 config/sanctum.php 中设置保护密钥后,身份验证似乎工作顺利。老实说,我不记得为什么我决定为我的 api 守卫使用会话驱动程序。

配置/sanctum.php 配置/sanctum.php

配置/auth.php

配置/auth.php