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