【问题标题】:Ember Simple Auth not setting the Bearer TokenEmber Simple Auth 未设置承载令牌
【发布时间】:2015-11-11 04:20:37
【问题描述】:

无论出于何种原因,我的身份验证似乎在登录时正常工作,但是我无法访问任何使用 Ember Data 的路由。 Bearer Token 似乎没有设置好。

这是我的登录表单组件

import Ember from 'ember';

export default Ember.Component.extend({
  session: Ember.inject.service(),

  actions: {
    authenticate() {
      let { identification, password } = this.getProperties('identification', 'password');
      this.get('session').authenticate('authenticator:oauth2', identification, password)
      .catch((reason) => {
        this.set('errorMessage', reason.error);
        console.log(reason.error);
      });
    }
  }

});

这是我的授权人(位于 app/authorizers/application.js 中)

import OAuth2Bearer from 'ember-simple-auth/authorizers/oauth2-bearer';

export default OAuth2Bearer.extend();

这是我的验证器(位于 app/authenticators/oauth2.js 中)

import OAuth2PasswordGrant from 'ember-simple-auth/authenticators/oauth2-password-grant';
import config from 'contacts/config/environment';

export default OAuth2PasswordGrant.extend({
  serverTokenEndpoint: config.APP.host + '/' + config.APP.namespace + '/authenticate',
});

如果有人看到我遗漏了什么,请告诉我。谢谢!

【问题讨论】:

  • 试试这个:会话:Ember.inject.service('session')

标签: ember.js


【解决方案1】:

我想我会把它写下来作为答案,因为其他一切对我来说都很好

session: Ember.inject.service('session')

虽然如果是这种情况,你可以调用身份验证是没有意义的......嗯,你说登录似乎有效?

【讨论】:

  • .inject.service 的“会话”参数不是严格要求的(尽管为了清楚起见我总是使用它)。只要密钥与服务名称匹配,就可以使用 .service() 调用它。如果我想将密钥命名为 mySession 或类似名称,那么我需要执行 mySession: Ember.inject.service('session')
  • 呵呵,不开玩笑,谢谢!能学到新东西真是太好了。看到你的回答后,我意识到这更有意义。 =)
【解决方案2】:

如果您使用的是 ember-data,则您的应用程序适配器上缺少 DataAdapterMixin。

请看这里的例子:

http://log.simplabs.com/post/131698328145/updating-to-ember-simple-auth-10

相关代码为:

// app/adapters/application.js
import DS from 'ember-data';
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';

export default DS.JSONAPIAdapter.extend(DataAdapterMixin, {
  authorizer: 'authorizer:application'
});

DataAdapterMixin 将令牌注入到请求标头中,因此如果身份验证有效,但后续 API 请求无效,则问题可能出在此文件中。

如果您不使用 ember-data,则必须自己设置适配器以手动将令牌注入身份验证请求。您可以在上面的链接中看到一些示例。

编辑:修正了授权人的名字,你的名字在 authorizers/application.js 中,所以授权人是'authorizer:application'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    相关资源
    最近更新 更多