我正在尝试使用singinwithredirect
获取多个身份验证链接。我抓住错误.credential
并使用JSON.stringify
将其传递给Cookie。
从那里开始,我使用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"}
从cookie ('string')
转换回JSON后对象的样子:
Object {accessToken: "EAAQmrlAUQpEBAL4oiPWEJy.......", provider: "facebook.com"}
答案 0 :(得分:1)
首先,我建议您使用sessionStorage而不是Cookie,因为它包含您不希望在页面关闭时泄漏的OAuth访问令牌。
解析json对象后。 检查提供者字段。基于此,您可以确定它是什么类型的凭证。例如,如果提供者是facbeook.com:
var cred = firebase.auth.FacebookAuthProvider.credential(obj['accessToken');
在这种情况下,您将使用解析对象中的accessToken初始化凭证。
答案 1 :(得分:1)
完成后,您应该小心删除缓存的accessToken和secret。
解析的JSON可能不是用于链接挂起凭据的有效firebase对象。您必须先将其传递到firebase auth提供程序对象,然后再进行链接。
// 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);
});