【问题标题】:Laravel 8: Using Fortify in APIsLaravel 8:在 API 中使用 Fortify
【发布时间】:2021-01-10 08:29:22
【问题描述】:

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

在 Fortify 中有一个 authenticateUsing 函数,但即使这样也只是允许我们自定义身份验证逻辑而不是返回的数据。重定向仍由 Fortify 执行。

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

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

【问题讨论】:

    标签: laravel laravel-authentication laravel-sanctum


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 是的。这正是令人困惑的地方。使用 Fortify 时,我们提供了开箱即用的基本身份验证路由和服务(注册、登录、重置密码等),但正如您所说,它仅用于基于会话的身份验证。另一方面,Sanctum 可以同时进行基于会话和令牌的身份验证,但不提供任何身份验证路由。我的理解正确吗?
      • 在 Laravel 7 之前,我一直在我的项目中使用 Passport,并为我的 API 创建了所有这些身份验证路由。使用 Laravel 8,他们建议迁移到 Sanctum,除非我们需要完整的 OAuth 实施,所以我阅读了文档并得到的印象是 Sanctum 将为我进行令牌管理,而 Fortify(无头)将为我提供身份验证路线和开箱即用的服务,因此有了这两个包,我将摆脱我的自定义登录/注销功能以及 Passport。看来这种理解是不正确的。
      • 如果你有一个单独的前端应用程序,Fortify 几乎没用。您可以使用 Sanctum 或 Passport。但是您必须自己设置路由。如果 Sanctum 符合您的需要并且您是从头开始,那么使用 Sanctum 是有意义的。但是,如果您已经安装了 Passport,我会保持原样,因为搬到 Sanctum 并不会为您提供任何与 Passport 相比的好处。
      • 谢谢。这是有道理的。
      猜你喜欢
      • 2021-01-13
      • 1970-01-01
      • 2021-03-13
      • 2021-02-02
      • 2021-01-07
      • 2021-05-31
      • 2021-03-03
      • 2021-02-19
      • 2021-11-04
      相关资源
      最近更新 更多