我使用JS库调用firebase.auth().signInWithEmailAndPassword(email, password)并取回一个User对象。User对象包含一个refreshToken。
我使用curl 'https://docs-examples.firebaseio.com/rest/saving-data/auth-example.json?auth=TOKEN'调用Firebase。
令牌最终将过期。为了使应用程序(iOS和macOS)看起来像有持久登录,我想刷新令牌,如何使用REST或JS库?我在文档中找不到任何允许我使用refreshToken获得新token的调用。
发布于 2016-07-09 17:23:37
** UPDATE **现在也记录在Exchange a refresh token for an ID token部分下的Firebase REST文档中:
https://firebase.google.com/docs/reference/rest/auth/#section-refresh-token
目前,我发现的唯一方法是在这里:https://developers.google.com/identity/toolkit/reference/securetoken/rest/v1/token
您必须发出HTTP请求:
POST https://securetoken.googleapis.com/v1/token?key=YOUR_KEY
YOUR_KEY可以在Google developers console > API Manager > Credentials中找到。它在API Keys区下面。
确保请求主体是以以下格式构造的:
grant_type=refresh_token&refresh_token=REFRESH_TOKEN
其中,REFRESH_TOKEN是Firebase用户对象登录时的刷新令牌。
您必须设置头部Content-Type: application/json,否则您将得到错误(例如:"MISSING_GRANT_TYPE")。
POST调用将返回一个新的idToken (以前称为access_token)
发布于 2016-07-06 21:10:27
当您从浏览器调用时,.getIdToken(true)将自动刷新您的令牌。打这样的电话:
firebase.auth().currentUser.getIdToken(/ forceRefresh / true)
.then(function(idToken) {
}).catch(function(error) {
});更多信息请访问https://firebase.google.com/docs/reference/js/firebase.User#getIdToken
发布于 2019-07-19 20:14:38
我想这里的大多数人都在寻找一种方法来坚持他们的身份验证,不是在浏览器中,而是在节点后端。实际上有一种方法可以做到这一点:
下面是代码的本质:
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);
}
});https://stackoverflow.com/questions/38233687
复制相似问题