2016-12-29 9 views
5

W moim Firebase aplikacji, użytkownicy mogą zalogować się używającOdzyskaj poświadczeń dla niestandardowego uwierzytelniania w Firebase w celu połączenia się z dostawcą niestandardową

  • Google (stowarzyszony dostawcy przez Firebase) lub
  • parafinowy (wdrażane jako custom Auth Provider)

Chcę dać użytkownikowi możliwość połączenia obu kont. Więc sprawa ja otwarcie jest:

  1. znaki Obsługi się z Google
  2. użytkownik przechodzi do menu Ustawienia i „Połącz z Slack” Kliknięcia
  3. Konto użytkownika powinno wtedy być połączone, aby mógł zalogować się na obu Slack lub Google następnym razem

Zgodnie z dokumentacją, w celu powiązania konta, możesz zadzwonić albo linkWithPopup/Redirect dla federacyjnych dostawców lub auth.currentuser.link(credential) dla dostawcy poczty elektronicznej (https://firebase.google.com/docs/auth/web/account-linking).

Zastanawiam się, czy mogę w jakiś sposób uzyskać AuthCredential z mojego niestandardowego uwierzytelniania Slack i użyć powyższej metody link(credential)?
Czy ktoś z powodzeniem zarządzał łączeniem kont z niestandardowymi dostawcami autoryzacji?

Odpowiedz

4

To nie jest obsługiwane po wyjęciu z pudełka. Co można zrobić, jest następujący (wymaga szczypanie rzędu, głównie przełączanie kolejności):

  1. Zaloguj się z niestandardowego uwierzytelniania przy użyciu luz: (UID użyte tutaj w rachunku zwyczaj auth może być taka sama jak identyfikator luźnego użytkownika).
  2. linkWithPopup/Redirect/Credential za pomocą dostawcy Google lub poświadczenia istniejącego luźnego niestandardowego użytkownika.

Jeśli nalegać na proponowanym przepływu, można wykonać następujące czynności:

  1. Zaloguj się z Google pierwszy (uid przydzielone).
  2. Zaloguj się przy użyciu luzu (uzyskano poświadczenie luki OAuth).
  3. Wyślij token identyfikatora Firebase ID i dane logowania do backendu.
  4. Sprawdź, czy token to Firebase ID, zapytaj o luki w zapytaniu userinfo, aby uzyskać luźne dane użytkownika, w tym identyfikator luzu.
  5. Zapisz mapę hash z identyfikatorem Slack jako kluczem i uid Firebase jako wartością, inną mapą skrótu z uid firefoase jako klucz i identyfikator luzu jako wartością.
  6. Mint token niestandardowy z uidem firebase, ustaw niestandardowy atrybut luzu (luka: {identyfikator luzu}).
  7. Wyślij niestandardowy token na koniec i signInWithCustomToken (identyfikator zwolnienia będzie teraz dostępny w tokenie)
  8. Konto luzu jest teraz połączone z istniejącym kontem.

Następnym razem, gdy użytkownik loguje się z Slack:

  1. Wyślij luzu OAuth poświadczeń do backendu.
  2. Zapytanie o informacje o luce, aby uzyskać identyfikator luzu.
  3. Sprawdź mapę hash za pomocą przycisku luźnego identyfikatora dla odpowiedniego uid bazy firebase.
  4. Mint Token niestandardowy z uidem firebase, dodaj identyfikator luzu jako atrybut niestandardowy.
  5. zalogować się przy użyciu niestandardowego tokena na kliencie.

Jeśli użytkownik zaloguje się w Google.

  1. Wyślij token identyfikatora Firebase do zaplecza.
  2. Zweryfikuj token ID, wyszukaj odpowiadający mu identyfikator luzu na mapie skrótu za pomocą kluczy uid firebase.
  3. Niestandardowy token niestandardowy z identyfikatorem uid i luzu Firebase jako atrybutem niestandardowym.
  4. zalogować się przy użyciu niestandardowego tokena na kliencie.
Powiązane problemy