Sanctum SPA 身份验证 - web.php 与 api.php

时间:2021-02-28 22:34:12

标签: laravel laravel-sanctum

我正在使用 Sanctum 进行 SPA 身份验证。在我看到的几个示例中,人们在他们的 web.php 路由文件而不是 api.php 路由文件中创建身份验证路由(登录、注销、注册)。是否有一个原因?在文档中,我确实看到提到 here...

<块引用>

您可能想知道为什么我们建议您对路由进行身份验证 在应用程序的 routes/web.php 文件中使用 sanctum 守卫。 请记住,Sanctum 将首先尝试对传入请求进行身份验证 使用 Laravel 的典型会话身份验证 cookie。如果那个饼干 不存在则 Sanctum 将尝试验证请求 在请求的 Authorization 标头中使用令牌。此外, 使用 Sanctum 对所有请求进行身份验证可确保我们始终可以 在当前认证的用户实例上调用 tokenCan 方法

...但这是针对 API 令牌身份验证,而不是直接在 SPA 身份验证下。

是否有任何理由可以在 web.php 中更好地处理我的身份验证路由?

1 个答案:

答案 0 :(得分:1)

好吧,在典型的 Laravel 应用程序中,您的 API 路由是无状态的,不会持久化会话;特别是他们没有启动会话中间件。

因此,如果您将这些路由放在 API 文件中,则基于 cookie 的身份验证将不起作用。

在您的 Web 文件中包含这些路由允许将这些特定路由包装在会话中,从而允许基于 cookie 的身份验证,然后在需要时回退到使用无状态授权标头。

我忘记了确切的词,但是当 SPA 通过 API 令牌属于同一域时,Taylor 非常喜欢使用基于 cookie 的身份验证。

但这应该可以解释原因。当然,如果您愿意,欢迎您更改此设置。