Laravel 8:在 API 中使用 Fortify

dot*_*NET 8 laravel laravel-authentication laravel-sanctum

Laravel Fortify 可以在 API 的上下文中使用吗?据我了解,Fortify(虽然是无头的,即不包括 UI 层)允许我们自定义登录和注册页面,但在成功验证后它会自动重定向到主页页面。尽管 HOME 页面是可定制的,但这不是 API 登录的正常工作方式。它应该简单地以 JSON 格式返回一个成功令牌,而没有任何类型的重定向。

authenticateUsingFortify 中有一个函数,但即便如此,它也只是允许我们自定义身份验证逻辑而不是返回的数据。重定向仍然由 Fortify 执行。

如何在 REST API 的上下文中使用 Fortify?

注意:我将在我的 Vue 前端应用程序中使用它。我还将让Sanctum加入游戏,但在此之前,我只是想看看是否可以使用 Fortify 进行常规的基于令牌的身份验证,而无需编写自己的登录、注册和注销路由以及控制器功能。

小智 9

只需使用 'application/json' 或 'application/javascript' 设置 'Accept' 标头,然后 fortify 将响应 json 格式的正文而不是重定向。

顺便说一句,使用 Sanctum 而不是 Passport for SPA 更容易安全地保存令牌。谷歌关于在哪里存储 SPA 的 API 令牌,然后你会发现原因。


pkt*_*ndu 8

身份验证可以是基于会话的或基于令牌的。

Laravel Fortify 仅为基于会话的身份验证提供后端逻辑,因此不适用于基于令牌的 API 身份验证。

如果您需要基于令牌的 API 身份验证,您可以根据需要使用SanctumPassport。但无论哪种情况,您都必须编写一些代码。

如果您决定使用 Laravel Passport,我有一个可能有用的样板项目:https : //github.com/pktharindu/laravel-api-boilerplate-passport

  • 如果您有单独的前端应用程序,Fortify 几乎毫无用处。您可以使用 Sanctum 或 Passport。但您必须自己设置路由。如果 Sanctum 适合您的需求并且您是从头开始,那么使用 Sanctum 是有意义的。但如果您已经安装了 Passport,我会保持原样,因为搬到 Sanctum 不会为您提供比 Passport 更好的任何好处。 (3认同)
  • 是的。这正是令人困惑的地方。使用 Fortify 时,我们提供了开箱即用的基本身份验证路由和服务(注册、登录、重置密码等),但正如您所说,它仅适用于基于会话的身份验证。另一方面,Sanctum 可以进行基于会话和令牌的身份验证,但不提供任何身份验证路由。我的理解正确吗? (2认同)
  • 在 Laravel 7 之前,我已经在我的项目中使用 Passport,并为我的 API 创建了所有这些身份验证路由。对于 Laravel 8,他们建议迁移到 Sanctum,除非我们需要完整的 OAuth 实现,所以我阅读了文档并得到了这样的印象:Sanctum 将为我进行令牌管理,而 Fortify(无头)将为我提供身份验证路由和开箱即用的服务,因此有了这两个包,我将摆脱我的自定义登录/注销功能以及 Passport。看来这个理解并不正确。 (2认同)