ember.js - 无法使用 embre-simple-auth-token 访问 session 属性和 JWT 声明

标签 ember.js jwt ember-simple-auth

我的 Ember 应用程序中有一个基本的工作身份验证系统。我可以收到 JWT,我的应用程序会让我登录。问题是我无法使用 this.get('session').get('data.id') 之类的内容访问任何内容如 ember-simple-auth 的 GitHub 页面上的示例所示。

这是我的身份验证请求的响应:

{token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImFiY…yMyJ9.X0O3xMVikn-5l9gXBU5a2XF6vlMmTzm4mCqUNA68e-A", test: "abc123"}

这是 token 的有效负载:

{
  "id": "abc123"
}

但是,调用 this.get('session').get('data.id') 不会返回任何内容。我还尝试了其他方法,例如 this.get('session').get('id')

this.get('session').get('data') 返回:

{"authenticated":{"authenticator":"authenticator:jwt","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImFiYzEyMyJ9.X0O3xMVikn-5l9gXBU5a2XF6vlMmTzm4mCqUNA68e-A","test":"abc123"}}

因此,从技术上讲,有一种方法可以读取 test,但它似乎不是正确的方法。

this.get('session') 存在,但为空。设置属性效果很好,并且之后可以访问它们。

我如何访问 claim ? ember-simple-auth-token 有一个针对 JWT 的特定验证器,因此我认为它应该能够读取 token 。

最佳答案

您可以像这样获取解码后的有效负载:

JSON.parse(atob(this.get('session.data.authenticated.token').split('.')[1]))

谈论的是in this issue .

更新

我又看了一遍,意识到我可能误解了你的意思。 我上面提到的方法是如何从 token 中解码声明,但这不是您从模板/路由等访问声明的方式。

Here is a good blog post这展示了如何使声明更容易访问。

基本上,每当用户经过身份验证时,都会将一个属性添加到 session 中,该属性允许访问声明,例如 this.get('session.claims.id') .

在博客文章中,从 api 获取用户并保存为 session.account 。如果您只想将声明直接从 token 设置到 session ,您可以执行以下操作:

服务/session-account.js

import Ember from 'ember';
const { inject: { service }, RSVP } = Ember;
export default Ember.Service.extend({
  session: service('session'),
  store: service(),
  loadCurrentUser() {
    const token = this.get('session.data.authenticated.token');
    if (!Ember.isEmpty(token)) {
      var claims = JSON.parse(atob(token.split('.')[1]));
      this.set('session.claims', claims);
    }
  }
});

希望这正是您所寻找的。

关于ember.js - 无法使用 embre-simple-auth-token 访问 session 属性和 JWT 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35973142/

相关文章:

Ember.js - 在具有共享条件的 {{bindAttr}} 周围使用 {{#if}}?

ember.js - 为什么 Ember.js 需要服务器?

ember.js - 使用 Oauth2 token 恢复没有电子邮件和密码的 session

javascript - Ember Simple Auth - 如何更新存储的 token

ember.js - 新 Ember 路由器的访问实例

javascript - 如果路由是登录,如何在应用程序模板中隐藏导航栏

authentication - ASP.NET Core 3.1 - AddJwtBearer、OnTokenValidated 事件在失败时不考虑自定义消息

encryption - jwt Web token 应该加密吗?

python - 如何使用 python falcon rest api 创建具有多个用户级别的 token 的用户身份验证

ember.js - ember-simple-auth 不会为每个请求添加 Token