Ausgabe
Ich verwende derzeit Cognito-Benutzerpools, die mit Google als Identitätsanbieter verbunden sind, um die Benutzeranmeldung für meine Web-App zu handhaben. Im Moment habe ich nur die Anmeldung mit Google implementiert. Dies geschieht derzeit über die gehostete Benutzeroberfläche von Cognito.
Wenn sich Nutzer bei Google anmelden, möchte ich, dass sie immer aufgefordert werden, ihr Konto auszuwählen, dh diese Aufforderung angezeigt wird .
Ich habe jedoch festgestellt, dass dieser Bildschirm übersprungen wird, wenn ich nur mit einem Google-Konto angemeldet bin. Wenn ich jedoch bei keinem Google-Konto / 2 oder mehr Google-Konten angemeldet bin, wird dieser Bildschirm angezeigt.
Dinge, die ich versucht habe, damit dieser Bildschirm immer angezeigt wird:
- Verwenden der Funktion von AWS Amplify
federatedSignIn({provider: 'Google'})
. Ich habe jedoch festgestellt, dass dies nur ein Wrapper auf der gehosteten Benutzeroberfläche von Cognito ist und nur zu demselben Autorisierungsendpunkt weiterleitet, wie hier beschrieben . - Das Hinzufügen
prompt=select_account
zum Autorisierungsendpunkt, wie in der Dokumentation von Google beschrieben , hatte jedoch keine Auswirkungen. Dies war nicht überraschend, da die Option in der AWS-Dokumentation für den Autorisierungsendpunktprompt
nicht detailliert beschrieben wird .
Wenn jemand eine Idee hat, wie ich diesen Kontoauswahlbildschirm immer anzeigen lassen kann, wäre ich sehr dankbar.
Lösung
prompt=select_account
Es stellt sich heraus, dass AWS Cognito zu diesem Zeitpunkt (Januar 2020) (Bearbeiten: siehe unten für ihre vorgeschlagene Lösung, die immer noch problematisch ist) die (oder eine der von prompt
Google bereitgestellten) Optionen nicht unterstützt . Ging mit ihrer Unterstützung hin und her, und hier ist die endgültige resultierende Nachricht mit ihrem aktuellen Aktionsplan:
(Wiederholung des Problems) Auth.signOut() meldet sich nur von Cognito ab, aber nicht vom föderierten Anbieter (in Ihrem Fall Google). Wenn Sie also versuchen, sich erneut anzumelden (im Fall Ihres Kunden
Auth.federatedSignIn({ .provider: 'Google' }))
wird die Kontoauswahl/Anmeldung von Google automatisch umgangen und direkt die vorhandene Sitzung verwendet. [was ein Problem sein könnte, wenn es sich um die falsche Google-Sitzung handelt]Eine suboptimale Lösung hierfür besteht darin, sich auch bei Google abzumelden. Sie können dies erreichen, indem Sie eine GET-Anforderung an https://accounts.google.com/logout senden . Auf diese Weise muss ein nachfolgender
federatedSignIn
den Google-Anmeldebildschirm durchlaufen.Ich habe diesen Fall an das Cognito-Serviceteam in Seattle eskaliert, um eine Funktionsanfrage zu erhalten:
prompt="select_account"
Möglichkeit, eine Option über die URL-Abfrage an Google weiterzugeben .
Bearbeiten, um Cognito-Antwort hinzuzufügen:
Wenn Sie die von Cognito gehostete Benutzeroberfläche verwenden, können Sie die Sitzung des Cognito-Benutzerpools bereinigen, indem Sie den Logout-Endpunkt aufrufen:
https://<Your-User-Pool-Domain>.auth.<Your-User-Pool-Region>.amazoncognito.com/logout?client_id=<Your-User-Pool-App-Client>&logout_uri=<Your-User-Pool-SignOut-URL>
Als ich (AWS Congito) versuchte, das Problem mit der von Cognito gehosteten Benutzeroberfläche zu reproduzieren, musste ich mich erneut bei Google anmelden, nachdem ich mich abgemeldet hatte. Ich konnte dieses Problem auf die eine oder andere Weise nicht reproduzieren.
Weitere Informationen und verschiedene Optionen finden Sie in der Cognito-Dokumentation für den Abmeldelink .
Nach dem Versuch ihrer Antwort: Leider funktioniert dieser Fix (über den Abmeldelink) nicht wie erwartet. Es lässt den Benutzer einen neuen Identitätsanbieter auswählen (Google, Facebook usw.), aber wenn der Benutzer mit dem von ihm ausgewählten angemeldet ist, verwendet es diese Benutzeridentität, anstatt dem Benutzer die Möglichkeit zu geben, zwischen ihnen zu wählen mehrere Konten oder melden Sie sich mit einem neuen an.
Beantwortet von – LocalPCGuy
Antwort geprüft von – Willingham (FixError Volunteer)