2

我正在使用 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, {
});

不幸的是,我仍然无法获取会话数据。

4

1 回答 1

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();
    }
  }
});
于 2016-01-26T11:10:36.387 回答