Firebase Authentication Javascript: setCookie для ожидающих учетных данных для перенаправления

Я пытаюсь получить ссылку на несколько аутентификаций, используя singinwithredirect, Я улавливаю ошибку .credential и использовать JSON.stringify чтобы пропустить это через печенье.

Оттуда я конвертирую его обратно в объект, используя JSON.parse, но когда я попытался передать учетный объект в result.user.link(credential), это дает мне ошибку, заявляющую:

firebase.js:74 Uncaught Error: link failed: First argument "credential" must be a valid credential

Нужно ли преобразовывать объект JSON в объект Firebase, чтобы передать его в учетные данные? Как изначально выглядит объект:

Ef {accessToken: "EAAQmrlAUQpEBAL4oiPWEJy.......", provider: "facebook.com"}

Как выглядит объект после преобразования обратно в JSON из cookie ('string'):

Object {accessToken: "EAAQmrlAUQpEBAL4oiPWEJy.......", provider: "facebook.com"}

2 ответа

Решение

Вы должны быть осторожны, чтобы удалить кэшированные accessToken и секрет, когда вы закончите с ними.

Проанализированный JSON, возможно, не является допустимым объектом firebase для связывания ожидающих учетных данных. Вы должны передать его в объект поставщика проверки подлинности firebase, прежде чем ссылаться.

// Read cookie
var pendingCred = document.cookie;

// Parse
var pendingCredObj = JSON.parse(pendingCred);

// Delete cookie
document.cookie ="pendingCred=" + null + "; expires=0";

// Link with appropriate auth provider object
if (pendingCredObj.provider == "twitter.com"){
    var pendingCredObjProv = firebase.auth.TwitterAuthProvider.credential(pendingCredObj.accessToken, pendingCredObj.secret);
} else if (pendingCredObj.provider == "facebook.com"){
    var pendingCredObjProv = firebase.auth.FacebookAuthProvider.credential(pendingCredObj);
} else if (pendingCredObj.provider == "google.com"){
    var pendingCredObjProv = firebase.auth.GoogleAuthProvider.credential(pendingCredObj);
} else if (pendingCredObj.provider == "password"){
    var pendingCredObjProv = firebase.auth.EmailAuthProvider.credential(pendingCredObj);
}

// Link pending credentials to original user account
auth.currentUser.link(pendingCredObjProv).then(function(user) {
    console.log("Account linking success", user);
}, function(error) {
    console.log("Account linking error", error);
});

Во-первых, я рекомендую вам использовать sessionStorage вместо файлов cookie, поскольку в них содержится токен доступа OAuth, который вы не хотите пропускать при закрытии страницы.

После того, как вы проанализируете объект json. Проверьте поле поставщика. На основании этого вы можете выяснить, какой это тип учетных данных. Например, если провайдер - facbeook.com:

var cred = firebase.auth.FacebookAuthProvider.credential(obj['accessToken');

В этом случае вы должны инициализировать учетные данные с помощью accessToken в разобранном объекте.

Другие вопросы по тегам