【发布时间】:2016-09-12 22:09:23
【问题描述】:
我正在遵循 Firebase 关于社交登录的说明。下面是我正在使用的示例,从登录身份验证的角度来看,它一切正常。
但是,我的 Google 和 Facebook 登录都独立工作。
我现在想做的是链接帐户。实际上,您可以在下面看到这可能会发生什么(查看评论):
如果您在应用上使用多个身份验证提供程序,您应该在此处处理链接用户帐户。
我尝试了许多我认为应该放在这里的变体,但无济于事。任何人都可以指导我他们认为应该去哪里吗?谢谢!
function initFBApp() {
// Result from Redirect auth flow.
// [START getidptoken]
firebase.auth().getRedirectResult().then(function (result) {
if (result.credential) {
// This gives you a Facebook Access Token. You can use it to access the Facebook API.
var token = result.credential.accessToken;
// [START_EXCLUDE]
document.getElementById('FBquickstart-oauthtoken').textContent = token;
}
else {
document.getElementById('FBquickstart-oauthtoken').textContent = 'null';
// [END_EXCLUDE]
}
// The signed-in user info.
var user = result.user;
}).catch(function (error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// The email of the user's account used.
var email = error.email;
// The firebase.auth.AuthCredential type that was used.
var credential = error.credential;
// [START_EXCLUDE]
if (errorCode === 'auth/account-exists-with-different-credential') {
alert('You have already signed up with a different auth provider for that emails.');
// If you are using multiple auth providers on your app you should handle linking
// the user's accounts here.
}
else {
console.error(error);
}
// [END_EXCLUDE]
});
// [END getidptoken]
// Listening for auth state changes.
// [START authstatelistener]
firebase.auth().onAuthStateChanged(function (user) {
if (user) {
// User is signed in.
var displayName = user.displayName;
var email = user.email;
var emailVerified = user.emailVerified;
var photoURL = user.photoURL;
var isAnonymous = user.isAnonymous;
var uid = user.uid;
var providerData = user.providerData;
// [START_EXCLUDE]
document.getElementById('FBquickstart-sign-in-status').textContent = 'Signed in';
document.getElementById('FBquickstart-sign-in').textContent = 'Log out';
document.getElementById('FBquickstart-account-details').textContent = JSON.stringify(user, null, ' ');
// [END_EXCLUDE]
}
else {
// User is signed out.
// [START_EXCLUDE]
document.getElementById('FBquickstart-sign-in-status').textContent = 'Signed out';
document.getElementById('FBquickstart-sign-in').textContent = 'Log in with Facebook';
document.getElementById('FBquickstart-account-details').textContent = 'null';
document.getElementById('FBquickstart-oauthtoken').textContent = 'null';
// [END_EXCLUDE]
}
// [START_EXCLUDE]
document.getElementById('FBquickstart-sign-in').disabled = false;
// [END_EXCLUDE]
});
// [END authstatelistener]
document.getElementById('FBquickstart-sign-in').addEventListener('click', toggleFBSignIn, false);
}
【问题讨论】:
-
您是否在没有 Firebase 身份验证后端要求的情况下手动链接帐户?还是您这样做是因为您收到错误“auth/account-exists-with-different-credential”?
-
我想链接它们,以便用户拥有一个帐户而不是多个帐户。通过第二种机制进行身份验证时,我成功收到了上述错误。我现在想用帐户链接替换“auth/account-exists-with-different-credential”消息
-
不确定我是否理解,但如果您在登录时遇到该错误,并因此尝试链接返回该错误的帐户。在下面检查我的答案。
标签: javascript firebase facebook-login firebase-authentication social