0

我正在使用Ionic2 rc4和Firebase身份验证。如果我拨打signupFirebaseUser(),它会按预期记录uid。但是,当我打电话给loginGoogle()时,我希望它记录一个不同的uid,但它打印相同uidFirebase登录 - 如何重置uid?

这意味着用户不能与email addresspassword登录,注销,然后重新与他们的谷歌帐户(不同的电子邮件地址)登录,因为它要保留他们的老uid

signupFirebaseUser(email: string, password: string): firebase.Promise<any> { 
    return this.fireAuth.createUserWithEmailAndPassword(email, password).then((newUser: firebase.User) => { 
     console.log(newUser.uid); 
     this.userProfile.child(newUser.uid).set({ email: email }); 
     newUser.sendEmailVerification(); 
    }); 
} 

然后

public logout(auth: FirebaseAuth, fireAuth: firebase.auth.Auth): Promise<any> { 
     return auth.logout().then(() => { 
      fireAuth.signOut().then(() => { 
      }); 
     }); 
} 

然后

loginGoogle() { 
    this.auth.login({ 
     provider: AuthProviders.Google, 
     method: AuthMethods.Popup 
    }).then((data: FirebaseAuthState) => { 
     console.log(data.uid); 
    }).catch((error) => { 
     console.error('loginGoogle', error); 
    }); 
    } 

问题

你如何重置火力地堡认证忘记老uid?所以当你再次登录时,你可以从干净的开始。

即生成每个供应商(谷歌,Facebook,电子邮件)的新uid

任何帮助表示赞赏。

+1

一种方法可以使用user.delete()来删除用户,然后重新创建它会自动有一个新的UID – AndroidBeginner

+0

是的,你是正确的,将工作。但是如果您想再次以旧用户的身份重新登录(即继续交换用户),会发生什么情况?我不想删除该帐户,因为我针对每个用户存储了数据。 – Richard

+0

对不起,误解了这个问题。您可以尝试将新的Firebase Auth API用于Google登录吗? (https://firebase.google.com/docs/auth/web/google-signin)。如果您需要Cordova支持,则可以使用OAuth插件(例如https://github.com/nraboy/ng-cordova-oauth),然后使用返回的访问令牌调用signInWithCredential()。 –

回答

0

你最有可能对确保你只能有每个电子邮件地址帐户的选项(这实际上是默认的,如果我没记错的话)。要更改此选项,请前往https://console.firebase.google.com/project/_/authentication/providers,选择您的Firebase项目,向下滚动到“高级”部分,然后点击“每个电子邮件地址一个帐户”旁边的“更改”按钮。您可以设置如何处理同一电子邮件地址的帐户并关闭此行为。

+0

谢谢,但这不适合我。我只希望每个电子邮件地址都有一个帐户,但我希望有多个电子邮件地址能够在同一个设备或浏览器上登录。我的问题是,如果另一个电子邮件地址尝试登录,则失败,因为uid不会更改。我想要的只是电子邮件地址和uid(或帐户)之间的一对一映射。 – Richard

+0

登录时发生的确切错误是什么? – jwngr

+0

我现在很困惑。当我测试它时,它似乎正在工作。我的代码中有一个错误,我无意中修复了这个错误。对不起,浪费你的时间。我很感激帮助。 – Richard