Ember简单身份验证:如何将授权头添加到浏览器启动的请求中



我正在使用oAuth2。

DataAdapterMixin会自动将Authorization标头添加到所有Ember数据请求中。会话服务authorize方法可以用于将其添加到Ajax调用中,但如何确保将头添加到从浏览器发出的GET请求中呢。正如文档中所解释的,我已经尝试创建一个自定义授权器,但没有调用authorize方法。

我的应用程序存储只有授权用户才能看到的发票和对账单(通常是pdf)的扫描。根据用户的操作,我正在更改对象标记的数据属性。

这个

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

呈现为如下内容:

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

除授权外,这项工作正常。

任何建议都将不胜感激。我是Ember的新手,所以如果我走错了路,请告诉我。

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

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简单auth的authorize函数,即可在授权通过后设置标头(由session.isAuthenticated布尔值和已通过的token 定义

编辑:

我忘了你还需要在简单授权配置中定义你正在使用本地授权器(这让我有一段时间感到困惑,因为我认为ember简单授权默认情况下会使用overriden本地授权器):

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

我会努力挖掘我是从哪里得到的(因为ember简单的auth文档并不擅长描述自滚动授权机制…)

第2版:正如marcouw所指出的(他应该知道,他写了ember simple auth!),这是1.0之前的行为。authorizer现在是会话服务的一部分,会话服务需要注入到应用程序中。参见ember simple labs 1.0之前的升级

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

URL最终看起来像:

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

我对这种变通办法并不感到自豪。这是一个糟糕的编程,但这是我迄今为止唯一做过的事情。

最新更新