【问题标题】:JWT Authentication with Rails and Ember JS使用 Rails 和 Ember JS 进行 JWT 身份验证
【发布时间】:2018-09-10 15:27:28
【问题描述】:

在使用 JWT、Rails API 和 JS 前端框架(例如 Ember JS)时,进行用户注销操作的正确方法是什么?我实际上在做的是:

  • 使用 Rails 5.2 作为 API
  • 使用 Ember JS 3.3 作为前端
  • 使用 Ember Simple Auth 作为 OAuth 插件
  • example app,它的 ma​​ster 分支,按需工作
  • 示例应用,its without login branch 无法注销用户
  • 在 Rails API 和 Ember JS 应用程序之间的每个请求中检查是否存在并传入一个令牌。

我的问题是:

  • 我应该在后端模型(例如用户)中保留一个令牌值吗? 我需要它在后端的后台发出另一个请求。

  • 用户在后台登出时是否应该将token值设置为nil

  • 我在退出操作时 ESA 做错了什么?

  • 实际上,令牌值保存在客户端的 cookie 中(有关详细信息,请参阅 https://github.com/simplabs/ember-simple-auth)。我按照他们的指南和他们提供的dummy app 进行操作。

  • 我在 Ember JS 论坛上也有一个 discussion 并尝试遵循一些提示和建议,但仍然没有成功。

谢谢。

【问题讨论】:

  • 你发现了吗?我知道我们正在讨论这个问题
  • @NullVoxPopuli,正是:)。不,不幸的是我仍然没有任何线索。
  • @NullVoxPopuli 你会看看是否有什么要添加/编辑我的答案吗?
  • 对我来说看起来不错:+1:@handlebears
  • @handlebears 非常感谢你花时间写这么详细的解释。不幸的是,如果不回答我提出的问题,它并没有提供太多帮助,并且仍然遵循大多数 Ember Auth 附加组件和插件的几乎相同的抽象和大量文档。我正在使用 ESA(ember-simple-auth)。 Example app,master 分支,按需工作(登录/注销)。

标签: ember.js oauth-2.0 jwt rails-api


【解决方案1】:

这个答案至少适用于 Ember 1.13 到 3.x。

身份验证有多种形式,我认为正确的方法是与后端易于理解的匹配。

由于您的 JWT 位于 cookie 中,因此我们可以将该 cookie 视为事实的来源。与其在模型挂钩中做一些复杂的事情来解析 cookie,您可以定义一个服务,该服务具有获取 cookie、解析它的功能,并将结果保存到服务上的值或返回您需要的值。

这会给您带来一些好处。您可以从应用程序中的任何位置(包括适配器)获取值,并且身份验证的所有逻辑都位于一个位置。另一方面,您必须自己处理异步行为(即,如果路由依赖于登录信息,您将必须管理身份验证和路由转换之间的操作顺序)。

Ember Simple Auth 因为这个问题而非常受欢迎。尽管 cookie 中的 JWT 没有开箱即用的功能,但如果您有一个基于登录行为具有不同状态的应用程序,那么学习它可能是一项不错的投资。

用户模型是一种介于手动服务和 Ember 简单身份验证之间的中间地带,因为您可以获取用户模型并在整个应用程序中依赖它,并在异步方面获得一些帮助。请注意不要将您的身份验证代码分散到整个应用程序中。

最后,为了触发注销,我将创建一个函数,通过设置最大年龄/到期时间like this 来销毁 cookie。如果您在服务上处理身份验证,这意味着您可以使用Router Service,然后使用transitionTo 登录页面。如果您使用的是 Ember 简单身份验证,则该功能可以放在自定义身份验证器的 invalidate 挂钩中。示例:

无效(){ this._super() document.cookie = "some_token_name=; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/" 返回 Promise.resolve(); }

最后,对于传递令牌来验证请求,如果您使用的是 Ember Data,这可以在适配器的 headers method 中轻松完成。

【讨论】:

    猜你喜欢
    • 2016-04-20
    • 2019-08-18
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 2017-04-27
    • 2017-11-25
    • 2023-03-27
    相关资源
    最近更新 更多