我正在使用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的新手,所以如果我以错误的方式解决这个问题,请告诉我。
答案 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">
我并不为这种解决方法感到自豪。这是一个可怕的编程,但它是我迄今为止唯一的工作。