Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 使用Rails和Ember JS的JWT身份验证_Ember.js_Oauth 2.0_Jwt_Rails Api - Fatal编程技术网

Ember.js 使用Rails和Ember JS的JWT身份验证

Ember.js 使用Rails和Ember JS的JWT身份验证,ember.js,oauth-2.0,jwt,rails-api,Ember.js,Oauth 2.0,Jwt,Rails Api,当使用JWT、Rails API和JS前端框架(例如Ember JS)时,进行用户注销操作的正确方法是什么?我实际上在做的是: 使用Rails 5.2作为API 使用Ember JS 3.3作为前端 用作OAuth附加组件 ,其主分支可根据需要工作 示例应用程序,无法注销用户 在Rails API和Ember JS应用程序之间的每个请求中检查存在性并传递令牌 我的问题是: 我是否应该在后端模型(例如,用户)中保留一个令牌值? 我需要它在后端的后台发出另一个请求 当用户在后端注销时,我是否应

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

  • 使用Rails 5.2作为API
  • 使用Ember JS 3.3作为前端
  • 用作OAuth附加组件
  • ,其主分支可根据需要工作
  • 示例应用程序,无法注销用户
  • 在Rails API和Ember JS应用程序之间的每个请求中检查存在性并传递令牌
我的问题是:

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

  • 当用户在后端注销时,我是否应该将令牌值设置为
    nil

  • 关于注销操作,我对ESA有什么错

  • 实际上,令牌值保存在客户端的cookie中(有关更多详细信息,请参阅)。我跟随他们的向导和他们提供的服务

  • 我在Ember JS论坛上也做了一次尝试,尝试了一些提示和建议,但仍然没有成功

谢谢。

此答案适用于Ember 1.13至至少3.x

身份验证有很多种风格,我认为正确的方法是使用易于理解的后端

因为你的JWT是在一块饼干里,让我们把那块饼干当作真理的源泉。与在模型钩子中解析cookie相比,您可以定义一个服务,该服务具有获取cookie、解析cookie的函数,并将结果保存到服务上的值或返回所需的值

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

因为这个问题,它很受欢迎。尽管Cookie中没有现成的JWT功能,但是如果你有一个基于登录行为的不同状态的应用程序,那么学习它可能是一个不错的投资

用户模型是一种介于手动服务和Ember Simple Auth之间的中间地带,因为您可以获得用户模型并在整个应用程序中依赖它,另外还可以获得一些有关async的帮助。只是要小心,不要将身份验证代码分散在整个应用程序中

最后,为了触发注销,我将创建一个函数,通过设置max age/expiration来销毁cookie。如果您在服务上处理身份验证,这意味着您可以使用登录页面,然后将其转换到登录页面。如果您使用的是Ember Simple Auth,则该功能可以进入自定义验证器的
invalidate
钩子中。例如:

使无效{ 这个._super() document.cookie=“some_token_name=;expires=Thu,2013年12月18日12:00:00 UTC;path=/” 返回承诺。解决(); }


最后,对于将令牌传递给身份验证请求,如果您使用的是Ember数据,则可以在适配器中轻松完成此操作。

您知道了吗?我知道我们是在谈论不和谐的事情this@NullVoxPopuli,正是:)。不,不幸的是,我仍然没有任何线索。@NullVoxPopuli您是否可以为我的以下答案添加/编辑任何内容?看起来不错:+1:@handlebears@handlebears非常感谢您花时间写下如此详细的解释。不幸的是,如果不回答我提出的问题,它不会提供太多帮助,并且仍然遵循大多数Ember Auth附加组件和插件的几乎相同的抽象和大量文档。我正在使用ESA(ember simple auth),主分支,根据需要工作(登录/注销)。