我正在使用成员-cli-简单-简单的加注与托里作为我的认证流程。
到目前为止,我已经设法使用自定义的Torii提供程序和自定义的简单Auth身份验证器来实现身份验证。
现在,我想使用自定义的Simple Auth Authorizer将访问令牌注入请求。
在文档https://github.com/simplabs/ember-simple-auth#implementing-a-custom-authorizer之后,我添加了一个自定义授权程序&初始化器
authorizers/myservice.js
import Base from 'simple-auth/authorizers/base';
import Ember from 'ember';
export default Base.extend({
/**
@method authorize
@param {jqXHR} jqXHR The XHR request to authorize (see http://api.jquery.com/jQuery.ajax/#jqXHR)
@param {Object} requestOptions The options as provided to the `$.ajax` method (see http://api.jquery.com/jQuery.ajaxPrefilter/)
*/
authorize: function(jqXHR) {
var accessToken = this.get('session.content.token');
if (this.get('session.isAuthenticated') && !Ember.isEmpty(accessToken)) {
jqXHR.setRequestHeader('Authorization', 'Bearer ' + accessToken);
}
}
});initializers/authorization.js
import MyserviceAuthorizer from '../authorizers/myservice';
export function initialize(container, application) {
container.register('authorizer:myservice', MyserviceAuthorizer);
}
export default {
name: 'authorization',
before: 'simple-auth',
initialize: initialize
};&包括在开发环境中的config/environment.js中
ENV['simple-auth'] = {
authorizer: 'authorizer:myservice',
crossOriginWhitelist: ['*']
}不幸的是,通过添加这一点,它现在已经破坏了身份验证。
看来Torii不再收到回复了。
The response from the provider is missing these required response params: access_token, token_type, expires_in
我在这里还包括了Torii提供程序代码&简单的Auth身份验证代码。
任何建议或帮助都将是非常感谢的,我对此有点执着。
torii-providers/myservice.js
import Provider from 'torii/providers/oauth2-bearer';
import {configurable} from 'torii/configuration';
import env from '../config/environment';
export default Provider.extend({
name: 'myservice',
baseUrl: (env.api_host + '/oauth/authorize'),
responseParams: ['access_token', 'token_type', 'expires_in'],
redirectUri: configurable('redirectUri', function(){
// A hack that allows redirectUri to be configurable
// but default to the superclass
return this._super();
})
});和一个自定义的简单Auth认证器
authenticators/myservice.js
import Ember from 'ember';
import Base from 'simple-auth/authenticators/base';
import ajax from 'ic-ajax';
export default Base.extend({
restore: function(data) {
return new Ember.RSVP.Promise(function(resolve, reject) {
if(!Ember.isEmpty(data.currentUser)) {
resolve(data);
} else {
reject();
}
});
},
authenticate: function(options) {
return this.fetchOauthData(options).then(this.fetchUserData.bind(this));
},
fetchUserData: function(oauthData) {
var token = oauthData.token.access_token;
return ajax({
url: '/api/v1/users/me',
type: "GET",
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Bearer " + token);
}
}).then(function(userJSON){
return {
currentUser: userJSON.user,
token: token
};
});
},
fetchOauthData: function(options) {
return new Ember.RSVP.Promise(function(resolve, reject) {
options.torii.open(options.provider).then(function(oauthData) {
resolve({
provider: oauthData.provider,
token: oauthData.authorizationToken
});
}, function(error) {
reject(error);
});
});
}
});发布于 2014-11-19 17:25:55
这可能与以下事实有关: Ember自动注册容器中app文件夹下的所有内容。尽管Ember文档的以下引用并没有清楚地解释这一点,但它给出了一个提示:
应用程序文件夹中的所有模块都可以由解析器加载,但通常情况下,类(如mixins和utils )应该使用import语句手动加载。
如果您的授权程序文件是app/authorizers/myservice.js,那么Ember将在容器上以'authorizer:myservice'名称注册它。容器将在查找单个实例时创建该实例。由于您在初始化器中执行相同的注册,因此可能会出现某种冲突。
https://stackoverflow.com/questions/26972433
复制相似问题