2014-11-17 2 views
1

인증 흐름에 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); 
     }); 
    }); 
    } 
}); 

답변

1

사용자 정의 간단한 인증 인증, . Ember CLI documentation에서 다음 인용 명확하게 설명하지 않지만, 힌트를 주지만 :

응용 프로그램 폴더에있는 모든 모듈

가 해결로드 할 수 있지만, 이러한 유지 mixin 및 유틸와 같이 일반적으로 클래스를 수동으로로드되어야한다 import 문. 사용자의 권한 부여 파일이 app/authorizers/myservice.js 경우

, 엠버 CLI는 컨테이너에 'authorizer:myservice' 이름으로 등록합니다. 룩업 (look up) 될 때 컨테이너는 차례대로 싱글 톤 인스턴스를 생성합니다. 이니셜 라이저에서 같은 등록을했기 때문에 충돌이있을 수 있습니다.

+0

아직도 통찰력에 대한 감사의 말에이 감사의 말을 전합니다. – Chris

+1

이것은 올바른 대답입니다.이 github 문제를 참조하십시오 : https://github.com/stefanpenner/ember-cli/issues/2145 - 정확한 이름 지정 규칙을 사용하면 해결자가 자동으로 컨테이너에 등록됩니다. .고마워요 snovity! – Chris

+1

Chris, 그 GitHub 문제는 훌륭한 발견입니다! 현재 문서에 설명 된 내용만으로는 충분하지 않습니다. – snovity