【问题标题】:Ember-simple-auth: How to add authorization header to browser-initiated requestsEmber-simple-auth:如何向浏览器发起的请求添加授权标头
【发布时间】:2015-12-03 10:47:26
【问题描述】:

我正在使用 oAuth2。

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

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

这个

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

呈现如下:

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

除了授权之外,这工作正常。

任何建议将不胜感激。我是 Ember 的新手,所以如果我以错误的方式处理这个问题,请告诉我。

【问题讨论】:

  • 只是检查我理解正确(因为您的示例代码与您的问题并不真正匹配),您实际上想要将“授权:承载 XXXXXXXXXX”添加到您的 http 标头(根据 oAuth 标准)?
  • 是的,这正是我的意思。在所有请求中添加该标头。

标签: ember.js ember-simple-auth


【解决方案1】:

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

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 定义)

编辑:

我忘记了你还需要定义你在你的 simple-auth 配置中使用你的本地授权器(这让我绊倒了一段时间,因为我认为 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

【讨论】:

  • 请注意,这仅适用于 Ember Simple Auth pre 1.0。
  • 感谢@stephen 抽出时间回复,但它似乎不起作用。当从浏览器启动 GET 时,似乎根本没有调用 authorize 方法。
【解决方案2】:

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

网址最终看起来像:

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

我对这种解决方法并不感到自豪。这是可怕的编程,但这是我迄今为止唯一能做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2017-01-04
    相关资源
    最近更新 更多