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)
여기 있는 대부분의 사람들은 브라우저가 아닌 노드 백엔드에서 인증을 유지하는 방법을 찾고 있을 것입니다.실제로 다음과 같은 방법이 있습니다.
- 새로 고침 토큰을 액세스 토큰과 교환(구글의 공용 API 사용)
- 액세스 토큰을 사용자 지정 토큰과 교환합니다(파이어베이스 기능 사용, 아래 참조)
- 사용자 지정 토큰으로 로그인
코드의 핵심은 다음과 같습니다.
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']와 토큰을 볼 수 있는 방법은 비슷합니다.
언급URL : https://stackoverflow.com/questions/38233687/how-to-use-the-firebase-refreshtoken-to-reauthenticate
'programing' 카테고리의 다른 글
| 추상수업을 위해 봄부츠에서 @Bean을 사용하여 Bean을 만드는 방법 (0) | 2023.06.26 |
|---|---|
| Git에서 특정 사용자의 커밋을 찾는 방법은 무엇입니까? (0) | 2023.06.26 |
| 데이터 프레임의 두 개 이상의 열을 새 이름의 새 열로 결합 (0) | 2023.06.26 |
| "삭제 캐스케이드" 제약 조건을 추가하는 방법은 무엇입니까? (0) | 2023.06.26 |
| Docker 볼륨을 사용한 WP-CLI 파일 권한 문제 (0) | 2023.06.26 |
