인증 흐름에 Torii와 함께 ember-cli-simple-auth 애드온을 사용하고 있습니다.Ember Simple Auth - 사용자 정의 인증 기관 차단 인증
지금까지 사용자 지정 단순 인증 기관과 결합 된 사용자 지정 TorI 공급자를 사용하여 인증을 수행 할 수있었습니다.
이제 사용자 지정 Simple Auth Authorizer를 사용하여 액세스 토큰을 요청에 주입하고 싶습니다. 내가 개발 환경
에config/environment.js
에 포함 된 사용자의 권한 부여 & 초기화
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
};
&을 추가 한 문서 https://github.com/simplabs/ember-simple-auth#implementing-a-custom-authorizer 다음
ENV['simple-auth'] = {
authorizer: 'authorizer:myservice',
crossOriginWhitelist: ['*']
}
불행히도이 기능을 추가하면 인증이 끊어졌습니다.
도리가 더 이상 응답을받지 못하는 것 같습니다.
The response from the provider is missing these required response params: access_token, token_type, expires_in
나도 여기 토리 제공자 코드를 모두에게 & 간단한 인증 인증 프로그램 코드를 포함 시켰습니다.
어떤 제안이나 도움이라도 대단히 감사하겠습니다. 저는이 문제에 조금 빠져 있습니다. 엠버 CLI가 자동으로 용기에 응용 프로그램 폴더 아래에 모든 것을 등록하는
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();
})
});
torii-providers/myservice.js
그리고 이것은 사실과 관련이있을 수
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);
});
});
}
});
아직도 통찰력에 대한 감사의 말에이 감사의 말을 전합니다. – Chris
이것은 올바른 대답입니다.이 github 문제를 참조하십시오 : https://github.com/stefanpenner/ember-cli/issues/2145 - 정확한 이름 지정 규칙을 사용하면 해결자가 자동으로 컨테이너에 등록됩니다. .고마워요 snovity! – Chris
Chris, 그 GitHub 문제는 훌륭한 발견입니다! 현재 문서에 설명 된 내용만으로는 충분하지 않습니다. – snovity