2016-07-06 3 views
10

JS 라이브러리 호출 firebase.auth().signInWithEmailAndPassword(email, password)을 사용하고 User 개체를 다시받습니다. User 개체에는 refreshToken이 포함되어 있습니다.Firebase refreshToken을 사용하여 재 인증하는 방법은 무엇입니까?

curl 'https://docs-examples.firebaseio.com/rest/saving-data/auth-example.json?auth=TOKEN'을 사용하여 Firebase를 호출합니다.

토큰은 결국 만료됩니다. 응용 프로그램 (iOSmacOS)에 영구 로그인이있는 것처럼 보이게하려면 토큰을 새로 고치려면 REST 또는 JS 라이브러리를 사용하여 어떻게해야합니까? 문서에서 refreshToken을 사용하여 새 token을 얻는 전화를 찾을 수 없습니다.

답변

6

현재 유일한 방법을 사용하여 여기에 있습니다 : https://developers.google.com/identity/toolkit/reference/securetoken/rest/v1/token

HTTP를 다시 만들어야합니다. 퀘스트 :

POSThttps://securetoken.googleapis.com/v1/token?key=YOUR_KEY

YOUR_KEYGoogle developers console > API Manager > Credentials에서 찾을 수 있습니다 곳. API Keys 섹션 아래에 있습니다. .가 로그인 할 때 REFRESH_TOKEN는 중포 기지 사용자 개체에서 새로 고침 토큰

grant_type=refresh_token&refresh_token=REFRESH_TOKEN

POST 호출이 새를 반환합니다

확인 요청 본문은 다음과 같은 형식으로 구성되어 있는지 확인 access_token. onAuth가 사용자의 경우, 페이지 새로 고침 호출됩니다

https://firebase.google.com/docs/reference/rest/auth/

+0

Gmail API 토큰 새로 고침 요청이 작동해야합니까? @kgaidis – ArtStyle

+0

@ArtStyle Gmail API에 익숙하지 않아 잘 모르겠습니다. – kgaidis

+0

이 기능은 작동하지만 불행하게도 firebase의 [onIdTokenChanged] (https://firebase.google.com/docs/reference/js/firebase)가 실행되지 않습니다. auth.Auth # onIdTokenChanged) 청취자 ... 나는 그것이해야한다고 생각한다. – Luiz

5

브라우저에서 전화를 걸 때 .getToken(true)은 토큰을 자동으로 새로 고칩니다. 이런 식으로 전화 걸기 :

firebase.auth().currentUser.getToken(/ forceRefresh/true) 
.then(function(idToken) { 

}).catch(function(error) { 

}); 
여기

더 많은 정보가 https://firebase.google.com/docs/reference/js/firebase.User#getIdToken

업데이트 :

getToken() 지금은 사용되지 않습니다, 나는이 작업을 수행하는 것으로 대신 getIdToken(true)

+2

는 currentUser는 응용 프로그램의 새로운 시작에 NULL하지 않을까요?일반 브라우저에서 어떻게 작동하는지 모르지만 쿠키 나 로컬 데이터는 저장하지 않습니다. 나는 특별히 refreshToken과 내가 특별히 필요로하는 것을 저장한다. – kgaidis

+1

해당 코드를 사용하려면 먼저 로그인해야합니다. firebase로 로그인하면 작동 할 것입니다. – Yevgen

+2

This! 그러나'.getToken'은 현재 사용하지 않으므로'.getIdToken'을 사용해야합니다. –

0
// Create a callback which logs the current auth state 
function authDataCallback(authData) { 
    if (authData) { 
    console.log("User " + authData['uid'] + " is logged with token" + authData['ie']); 
    } else { 
    console.log("User is logged out"); 
    } 
} 
// Register the callback to be fired every time auth state changes 
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
ref.onAuth(authDataCallback); 

이벤트 :


** UPDATE **이 또한 지금 Exchange a refresh token for an ID token 섹션에서 중포 기지 REST의 문서에 설명되어 있습니다 밖으로 로그 아웃했다 authData 그렇지 않으면, null이 될 것입니다. 토큰은 authdata['ie']에 있습니다. 아래의 스크린 샷에서 authData [ 'ie']와 토큰이 어떻게 비슷한지 확인할 수있는 auth 및 authdata 객체 다음에 토큰을 인쇄했습니다.

authdata.ie and token

관련 문제