如何在Ember.js 2.3中获取由Auth0创建的会话数据

时间:2016-01-26 07:03:56

标签: ember.js ember-cli ember-simple-auth auth0 ember-2.0.0

我正在使用Ember.js 2.3(和Ember-Data 2.3)。我正在使用Auth0设置一个简单的用户身份验证过程。没什么好看的,只是安装了Auth0根据:

https://auth0.com/docs/quickstart/spa/ember2js/no-api

现在,我的设置与此处给出的项目完全相同。但是,似乎我只能从application.hbs访问会话而不能访问任何其他模板。或路线。或其他任何东西。

所以这个把手片段:

{{#if session.isAuthenticated}}
  {{session.data.authenticated.profile.name}}
{{else}}
  NOPE
{{/if}}

这适用于application.hbs,但不在其他地方。这对我来说没有意义。如果Auth0本身说可以从任何模板访问session.data,并且这样的把手片段甚至存在,那么肯定会有一些我不知道的东西。我需要能够显示客户端的某些部分,并根据当前登录的用户限制某些操作(以及是否有人实际登录),所有这些操作都包含在session.data对象中。

将此对象传递给我要创建的每个组件似乎不合适,而我现在想到获取此数据的唯一方法是从localStorage手动获取它。我或许可以将这个手动过程变成mixin并将其包含在任何地方,但在我尝试找到迂回解决方案之前,我想确保我不会遗漏实现本身的内容。

除了application.hbs本身,我如何才能在整个应用程序中访问会话令牌?

编辑:更新问题以回应评论。我受保护的路线如下所示:

import Ember from 'ember';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';

export default Ember.Route.extend(AuthenticatedRouteMixin, {
});

遗憾的是,我仍然无法获得会话数据。

1 个答案:

答案 0 :(得分:0)

在ember-simple-auth会话中,您需要注入其他路由的服务。因此,如果要使用除应用程序模板之外的会话数据,则需要使用AuthenticatedRouteMixin扩展这些路由 (就像你在routes / home.js中所做的那样)。在控制器中,您需要注入服务,例如:

// app/controllers/application.js
import Ember from 'ember';

export default Ember.Controller.extend({
  session: Ember.inject.service('session')

  …
});

看看ember-simple-auth 如果选中ember-simple-auth-token

,您可以找到其他实施方案

修改 在你的routes / protected_route.js中尝试这个(它适用于我)

import Ember from 'ember';
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin';
export default Ember.Route.extend(ApplicationRouteMixin, {
  session: Ember.inject.service('session'),
  actions: {
    invalidateSession: function() {
      this.get('session').invalidate();
    }
  }
});