Я хочу, чтобы пользователи автоматически входили анонимно при первом посещении сайта, а затем в любой момент они должны иметь возможность войти в систему с помощью внешнего поставщика, такого как Google или LinkedIn, и продолжать использовать данные, которые былихранится под анонимной учетной записью.
let currentUser = auth.currentUser;
if (!currentUser) {
currentUser = (await auth.signInAnonymously()).user;
}
Я реализовал потоки OAuth 2.0, чтобы пользователи могли входить в мою систему с использованием различных провайдеров, включая LinkedIn.Мой сервер генерирует токен доступа JWT, который предоставляется веб-клиенту.
const accessToken = {
sub: my-service-account@my-firebase-project.iam.gserviceaccount.com,
iss: my-service-account@my-firebase-project.iam.gserviceaccount.com,
aud: "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
uid: 1234
// other claims...
}
const newUser = await auth.signInWithCustomToken(accessToken);
Пока все хорошо - но как мне связать эти два?В соответствии с документацией по связыванию учетных записей я должен иметь возможность сделать что-то вроде этого:
if (currentUser && currentUser.isAnonymous) {
const provider = new firebase.auth.OAuthProvider('myprovider');
const credential = provider.credential(token, token);
const linkedUser = await currentUser.linkWithCredential(credential);
}
Однако firebase отправляет запрос на https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyAssertion
{
idToken: {
"provider_id": "anonymous",
"iss": "https://securetoken.google.com/my-firebase-project",
"aud": "my-firebase-project",
"user_id": anonymousUserId,
"sub": anonymousUserId,
"firebase": {
"identities": {},
"sign_in_provider": "anonymous"
}
}
postBody: {
id_token: token,
access_token: token
providerId: "myprovider"
}
requestUri: "http://localhost"
returnIdpCredential: true
returnSecureToken: true
}
и я получаю ответ об ошибке 400:
INVALID_CREDENTIAL_OR_PROVIDER_ID : Invalid IdP response/credential: http://localhost?id_token=${token}&access_token=${token}&provider=myprovider
Мой интерфейс https работает на порт 3000 , а мой бэкэнд на /api/oauth/
, такжеhttps
- как настроить другой
requestUri
? - что должна делать конечная точка?