2014-11-29 2 views
1

ember 간단한 인증을 사용하여 액세스 토큰 (예 : 페이스 북에서)을 얻는 작업 oauth2 인증 프로세스가 있으며 fb.me를 호출하는 백엔드로 전송하십시오()를 호출 한 다음 JWT를 사용하여 토큰을 만듭니다. 그런 다음이 토큰은 ember-app로 보내지며, 모든 토큰은 ember-data에 의해 만들어진 요청을 포함하여 모든 서버 요청과 함께 보내야합니다.ember 간단한 인증 세션, ember 데이터 및 인증 헤더 전달

또한 브라우저를 다시로드 한 후에이 토큰을 사용할 수 있어야합니다.

많은 옵션을 사용해 보았습니다. 세션에서 'authToken'속성을 설정했습니다. 인증 된 세션을 유지하기 위해 로컬 저장소를 사용한다고 생각합니다.

하지만이 토큰의 검색을 조정하는 데 항상 문제가있는 것 같습니다. 세션에 대한 액세스 권한이 없거나 토큰이 더 이상 세션에 없거나 Ember 데이터 헤더를 변경할 수 없습니다. .

누구나이 작업을 수행하는 방법에 대한 간단한 예제가 있습니까? 쉽지는 않겠지 만, 분명히 뭔가 빠졌습니다.

감사합니다.

업데이트

아래 있지만, 세션 내용이 여전히 새로 고침에 손실 나는이 작업을 얻을 수 있었던 유일한 것은 도리를 사용하는 것입니다 - 난 아직 인증은 볼 수 있지만, 그 손실 할 수 있습니다 내가 여기서 설정 한 토큰. 그래서 저는 여전히 진정한 해결책을 찾고 있습니다.

authenticateWithGooglePlus: function() { 
     var self = this; 
     this.get('session').authenticate('simple-auth-authenticator:torii', 'google-oauth2') 
     .then(function() { 
      resolveCodeToToken(self.get('session'), self); 
     }); 
    } 

resolveCodeToToken는 세션을 설정 한 다음 보호 된 페이지로 전환, 서버에서 베어러 토큰을 가져옵니다

function resolveCodeToToken(session, route) { 
    var authCode = session.content.authorizationCode; 
    var type = session.content.provider.split('-')[0]; 
    $.ajax({ 
    url: 'http://localhost:4200/api/1/user/auth/' + type, 
    data: {authCode: authCode} 
    }).done(function (response) { 
    // todo handle invalid cases - where user is denied access eg user is disabled 
    session.set('authToken', response.token); 
    route.transitionTo('activity', moment().format('DDMMYYYY')); 
    }); 
} 

그리고 난에 저장된 토큰 (퍼팅에 대한 사용자 지정 권한 부여가 모든 요청에 ​​세션) : 썩 ('session.content.authToken이') 새로 고침 후 정의되지 왜

import Base from 'simple-auth/authorizers/base'; 

export default Base.extend({ 
    authorize: function(jqXHR, requestOptions) { 
    var accessToken = this.get('session.content.authToken'); 
    if (this.get('session.isAuthenticated') && !Ember.isEmpty(accessToken)) { 
     jqXHR.setRequestHeader('Authorization', accessToken); 
    } 
    } 
}); 

나는 세션이 고집했다 기본적으로 생각 모르겠어요 로컬 저장소. 그것이 인증된다는 사실은 지속되지만, 서버가 보호 된 엔드 포인트에 대한 호출을 거부 할 것이므로 토큰 없이는 쓸모가 없습니다.

답변

2

custom authenticator 먼저 Facebook에서 토큰을 가져온 다음 자신의 서버로 전송하여 응용 프로그램 토큰으로 교환하십시오. 일단 당신이 가지고 있으면 ember-data 요청의 허가와 세션 지속성 등을 무료로 얻습니다.

이 예를 살펴 유무 : 응답에 대한 https://github.com/simplabs/ember-simple-auth/blob/master/examples/7-multiple-external-providers.html

+0

감사합니다 - 나는이 도리 인증 자 (나는 모든 작업을했다) 대신 사용자 정의 것들을 구현 사용할 수 있습니다 생각했다. 그게 전부지만, 내가 코드에서 사용자 정의 것들을 사용할 수 있습니다. 하지만, 이후의 모든 Ajax 요청과 함께 'Authorization'토큰이 어떻게 전달됩니까? 내가 지금 얻은 것은 똑같은 문제가있다. 인증 헤더가 설정되어 있지 않다 ... 덕분에 – prule

+0

"권한 부여 '토큰"나는 정말로 "권한 부여'HEADER"(내 서버에서 반환 된 무기명 토큰이다. 내 서버가 보호 된 URL에 대한 모든 요청을 확인하는 토큰) – prule

+0

아, 사용자 정의 인증기에 의해 완료됩니까? https://github.com/simplabs/ember-simple-auth#implementing-a-custom-authorizer – prule

관련 문제