programing

Firebase 새로 고침 사용 방법재인증을 위한 토큰?

itmemos 2023. 6. 26. 21:06
반응형

Firebase 새로 고침 사용 방법재인증을 위한 토큰?

저는 JS 라이브러리 콜을 사용합니다.firebase.auth().signInWithEmailAndPassword(email, password)그리고 돌려받으세요.User물건.User개체에 .가 포함되어 있습니다.

사용합니다curl 'https://docs-examples.firebaseio.com/rest/saving-data/auth-example.json?auth=TOKEN'파이어베이스에 전화를 걸 겁니다

토큰이 결국 만료됩니다.애플리케이션처럼 보이게 하기 위해 (iOS그리고.macOS)에 영구 로그인이 있습니다. 토큰을 새로 고치고 싶습니다. 다음 중 하나를 사용하여 어떻게 해야 합니까?REST또는JS도서관?설명서에서 다음을 사용할 수 있는 통화를 찾을 수 없습니다.refreshToken새것을 구함token.

브라우저에서 전화를 걸 때.getIdToken(true)토큰이 자동으로 새로 고쳐집니다.다음과 같은 전화 걸기:

firebase.auth().currentUser.getIdToken(/ forceRefresh / true)
  .then(function(idToken) {
    
  }).catch(function(error) {

});

자세한 내용은 여기 https://firebase.google.com/docs/reference/js/firebase.User#getIdToken 에서 확인하십시오.

업데이트 ** 이는 현재 Firebase REST 문서에도 문서화되어 있습니다.Exchange a refresh token for an ID token섹션:

https://firebase.google.com/docs/reference/rest/auth/ #section-vlan-vlan-vlan


현재 제가 찾은 유일한 방법은 https://developers.google.com/identity/toolkit/reference/securetoken/rest/v1/token 입니다.

HTTP 요청을 수행해야 합니다.

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

어디에YOUR_KEYGoogle 개발자 콘솔 > API 관리자 > 자격 증명에서 확인할 수 있습니다.그것은 아래에 있습니다.API Keys부분.

요청 본문이 다음 형식으로 구성되어 있는지 확인합니다.

grant_type=refresh_token&refresh_token=REFRESH_TOKEN

어디에REFRESH_TOKEN로그인할 때 Firebase 사용자 개체의 새로 고침 토큰입니다.

헤더를 설정해야 합니다.Content-Type: application/json오류가 발생할 수 있습니다(예: "MISSING_GRANT_TYPE").

POST호출이 새 항목을 반환합니다.idToken(예전에는)access_token)

여기 있는 대부분의 사람들은 브라우저가 아닌 노드 백엔드에서 인증을 유지하는 방법을 찾고 있을 것입니다.실제로 다음과 같은 방법이 있습니다.

  1. 새로 고침 토큰을 액세스 토큰과 교환(구글의 공용 API 사용)
  2. 액세스 토큰을 사용자 지정 토큰과 교환합니다(파이어베이스 기능 사용, 아래 참조)
  3. 사용자 지정 토큰으로 로그인

코드의 핵심은 다음과 같습니다.

const requestP = require('request-promise');
const fsP = require('fs').promises;

const refreshToken = await fsP.readFile('./refresh_token.txt');
const res = await requestP.post({
  headers: {'content-type': 'application/x-www-form-urlencoded'},
  url: 'https://securetoken.googleapis.com/v1/token?key=' + firebaseConf.apiKey,
  body: 'grant_type=refresh_token&refresh_token=' + refreshToken,
  json: true
});
const customToken = await requestP.post({
  headers: {'content-type': 'text/plain'},
  url: 'https://<yourFirebaseApp>.cloudfunctions.net/createCustomToken',
  body: {token: res.access_token},
  json: true
});
await firebaseApp.auth().signInWithCustomToken(customToken);

그리고 화재 기지 기능은 다음과 같습니다.

export const createCustomToken = functions.https.onRequest(async (request, response) => {
  response.set('Access-Control-Allow-Origin', '*');

  try {
      const token = JSON.parse(request.body).token;
      const decodedToken = await admin.auth().verifyIdToken(token);
      const customToken = await admin.auth().createCustomToken(decodedToken.uid);
      response.send(customToken);
  } catch(e) {
      console.log(e);
      response.sendStatus(500);
  }
});
// 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);

이벤트onAuth사용자가 로그아웃한 경우 페이지 새로 고침 시 호출됩니다.authData그렇지 않으면 null이 됩니다.토큰은 에서 찾을 수 있습니다.authdata['ie']아래 스크린샷에서 나는 auth와 authdata 객체 뒤에 토큰을 인쇄했는데, 당신이 authData['ie']와 토큰을 볼 수 있는 방법은 비슷합니다.

authdata.ie and token

언급URL : https://stackoverflow.com/questions/38233687/how-to-use-the-firebase-refreshtoken-to-reauthenticate

반응형