我正在使用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">
我对这种变通办法并不感到自豪。这是一个糟糕的编程,但这是我迄今为止唯一做过的事情。