Ember-simple-auth:如何将授权标头添加到浏览器发起的请求中

时间:2015-12-03 10:47:27

标签: ember.js ember-simple-auth

我正在使用oAuth2。

DataAdapterMixin会自动将Authorization标头添加到所有Ember Data请求中。可以使用会话服务授权方法将其添加到Ajax调用,但是如何确保将标头添加到从浏览器发出的GET请求中。我已尝试按照文档中的说明创建自定义授权程序,但未调用authorize方法。

我的应用程序存储发票和报表(通常是pdf)的扫描,这些只能由授权用户查看。根据用户的操作,我正在更改对象标记的数据属性。

<object data={{attachViewURL}} width="800px" height="1200px">

呈现如下:

<object data="/scans/attachments/11"  width="800px" height="1200px">

除授权外,此方法正常。

任何建议都会非常感激。我是Ember的新手,所以如果我以错误的方式解决这个问题,请告诉我。

2 个答案:

答案 0 :(得分:0)

代替你回答我的评论,我只想把我的解决方案放在这里:

import Ember from 'ember';
import SimpleAuth from 'simple-auth/authorizers/base';

export default SimpleAuth.extend({
    authorize: function(jqXHR) {
        var token = this.get('session.secure.token');
        if (this.get('session.isAuthenticated') && !Ember.isEmpty(token)) {
          jqXHR.setRequestHeader('Authorization: ', 'Bearer ', token);
        }
    },
});

您可能想要进行更多检查等,但这几乎是您实际设置标头所需要做的全部内容。只需覆盖ember-simple-auth内置的授权函数,一旦授权通过,就会设置一个标头(由session.isAuthenticated布尔值和token

定义

修改

我忘了您还需要定义您在简单身份验证配置中使用本地授权程序(因为我认为ember-simple-auth会使用覆盖本地授权程序)默认情况下):

ENV['simple-auth'] = {
  authenticationRoute: 'login',
  authorizer: 'authorizer:local',
  session: 'session:user-session',
  routeAfterAuthentication: 'dashboard'
}

我会尝试挖掘我得到的地方(因为ember-simple-auth文档并不是特别擅长描述自动授权机制...... )

编辑2: 正如marcoow指出的那样(他应该知道,他写的是ember-simple-auth!),这是1.0之前的行为。授权者现在是会话服务的一部分,需要将其注入应用程序。见ember-simple-labs pre-1.0 upgrade

答案 1 :(得分:0)

我设法实现的唯一方法是在生成的URL中包含访问令牌,然后在后端手动进行身份验证。

URL最终看起来像:

<object  data="/scans/attachments/11?token=a0a59197-afab-438a-b6cf-11237e51a2d5"  width="800px" height="1200px">

我并不为这种解决方法感到自豪。这是一个可怕的编程,但它是我迄今为止唯一的工作。