gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:59:19 27 4
gpt4 key购买 nike

我的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com