Я знаю, что токен Firebase ID можно использовать для действий от имени пользователя. Но токен истекает через 1 час. Чтобы исправить это, документацию и этот пост Как использовать FireBase refreshToken для повторной аутентификации? вы можете предположительно повторно пройти аутентификацию с помощью команды REST здесь https://firebase.google.com/docs/reference/rest/auth/
Я не могу заставить это работать. Вот код Android Flutter для печати токена на logcat
FirebaseAuth.instance;.currentUser().then((FirebaseUser user) {
if (user != null) {
user.getIdToken(refresh: true).then((IdTokenResult token) {
dbg.log('firebase TOKEN ' + token.token );
dbg.log('firebase TOKEN authtime ' + token.authTime.toIso8601String() );
dbg.log('firebase TOKEN expiration ' + token.expirationTime.toIso8601String() );
dbg.log('firebase TOKEN issued at ' + token.issuedAtTime.toIso8601String() );
});
}
}).catchError((e) {
dbg.log('fetch user ERROR: ' + e.toString());
});
Чтобы убедиться, что токен работает, вы можете добавить его в curl:
#!/bin/sh
TOKEN=<your token>
curl -H "Authorization: Bearer $TOKEN" \
https://firestore.googleapis.com/v1/projects/<your project>/databases/<your databases> | jq
Это работает. Но когда я пытаюсь получить refre sh токен:
#!/bin/sh
TOKEN=<your token>
WEB_API_KEY=<your web api key>
REFRESH_URL=https://identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken?key=${WEB_API_KEY}
ARGS='{"token":"'${TOKEN}'","returnSecureToken":true}'
echo $ARGS | jq
curl ${REFRESH_URL} \
-H 'Content-Type: application/json' \
--data-binary ${ARGS} | jq
, я получаю следующую ошибку:
{
"error": {
"code": 400,
"message": "INVALID_CUSTOM_TOKEN",
"errors": [
{
"message": "INVALID_CUSTOM_TOKEN",
"domain": "global",
"reason": "invalid"
}
]
}
}
Я пропустил шаг?