【问题标题】:Session properties and JWT claims can't be accessed with embre-simple-auth-token无法使用 embre-simple-auth-token 访问会话属性和 JWT 声明
【发布时间】:2016-03-13 17:09:03
【问题描述】:

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

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

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

这是令牌的有效负载:

{
  "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') 存在,但为空。设置属性效果很好,之后可以访问它们。

如何访问声明? ember-simple-auth-token 具有 JWT 的特定身份验证器,因此我认为它应该能够读取令牌。

【问题讨论】:

    标签: ember.js jwt ember-simple-auth


    【解决方案1】:

    你可以像这样得到解码后的payload:

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

    这是在谈论in this issue

    更新

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

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

    基本上,只要用户通过身份验证,就会向会话中添加一个属性,该属性允许像this.get('session.claims.id') 一样访问声明。

    在博客文章中,从 api 获取用户并保存为session.account。如果您只想将声明直接从令牌设置到会话,您可以这样做:

    services/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);
        }
      }
    });
    

    希望这正是您想要的。

    【讨论】:

    • 不幸的是,这只是实现我的目标的另一种复杂方式。为什么我不能通过 this.get('session').get(something) 访问我的 JWT 声明?不应该是基本功能吗?
    • 刚刚添加了一个更新,我认为这更符合您的需求:)
    猜你喜欢
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多