javascript - FirebaseUI tillåter endast användare att skapa ett konto men inte logga in på ett befintligt konto
Jag har satt upp FirebaseUI i min React-app så att användare kan skapa ett konto och logga in på det kontot för att få tillgång till min applikation. När en användare skapar ett konto verkar det sparas korrekt i Firebase, men när den användaren försöker logga in på sitt konto blir de tillfrågade att skapa ett konto igen istället för att ombes ange sitt lösenord för att kunna logga in på sitt befintliga konto. Om användaren försöker skapa ett annat konto med samma e-post får de ett felmeddelande --> Denna e-post finns redan utan något sätt att logga in. Vänligen återställ lösenordet för att återställa åtkomst. <--
Detta är koden för Firebase-implementeringen, som jag sa, verkar nästan allt fungera som det ska förutom det faktum att jag alltid blir ombedd att skapa ett nytt konto även när e-postadressen jag angav redan är kopplad till ett konto som är sparat i Firebase. Jag följde en handledningsvideo för att få detta att fungera och jag har noggrant kontrollerat, min kod är identisk med killens kod från videon, men hans implementation tillåter honom att logga in korrekt efter att ha skapat ett konto medan min bara låter mig skapa ett konto men inte logga in på det kontot.
import React, { useEffect } from "react";
import * as firebaseui from 'firebaseui';
import "firebaseui/dist/firebaseui.css";
import firebase from "firebase/compat/app";
const AuthGoogle = (props) => {
useEffect(() => {
const ui =
firebaseui.auth.AuthUI.getInstance() ||
new firebaseui.auth.AuthUI(props.auth);
ui.start(".firebase-auth-container", {
signInOptions: [
{
provider: firebase.auth.EmailAuthProvider.PROVIDER_ID
}
],
signInSuccessUrl: '/app'
});
}, [props.auth]);
return (
<>
<div className="firebase-auth-container"></div>
</>
);
};
export default AuthGoogle;
Updated version of the code based on answer suggestions, had to alter the suggestion slightly to resolve errors but even after fixing the errors the sign-in issue persists users are always prompted to create an account rather than being able to sign in to there existing account.
import React, { useEffect } from "react";
import { useNavigate } from "react-router-dom";
import "firebase/auth";
import * as firebaseui from 'firebaseui';
import "firebaseui/dist/firebaseui.css";
import firebase from "firebase/compat/app";
const AuthGoogle = (props) => {
const navigate = useNavigate();
useEffect(() => {
const uiConfig = {
signInFlow: 'popup',
signInOptions: [
{
provider: firebase.auth.EmailAuthProvider.PROVIDER_ID,
requireDisplayName: false
}
],
callbacks: {
signInSuccessWithAuthResult: () => {
navigate('/app');
return false;
},
},
};
let ui = firebaseui.auth.AuthUI.getInstance() || new
firebaseui.auth.AuthUI(props.auth);
ui.start('.firebase-auth-container', uiConfig);
}, [props.auth, navigate]);
return (
<div className="firebase-auth-container"></div>
);
};
export default AuthGoogle;
Svar #1
Problemet är det nyligen införda skyddet mot e-postenumeration, vilket bryter e-postautentisering för firebaseui. Det kan inaktiveras så här:
PROJECT_ID="TODO:set this to project id"
ACCESS_TOKEN="$(gcloud auth print-access-token --project="$PROJECT_ID")"
Disable email enumeration protection
curl -X PATCH -d "{'email_privacy_config':{'enable_improved_email_privacy':"false"}}" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H 'Content-Type: application/json' -H "X-Goog-User-Project: $PROJECT_ID" \
"https://identitytoolkit.googleapis.com/admin/v2/projects/$PROJECT_ID/config?updateMask=email_privacy_config"
Svar #2
Detta är en modifierad version av Peter Neumarks svar - tack så mycket - som fungerade för mig från Windows kommandorad
curl -X PATCH -d "{'email_privacy_config':{'enable_improved_email_privacy':"false"}}" -H "Authorization: Bearer %ACCESS_TOKEN%" -H "Content-Type: application/json" -H "X-Goog-User-Project: %PROJECT_ID%" "https://identitytoolkit.googleapis.com/admin/v2/projects/%PROJECT_ID%/config?updateMask=email_privacy_config"
Det saknades citattecken runt ett argument och referensen till variabeln behövde ändras för Windows.
Jag förlorade 3 dagar på att försöka lista ut detta - utan någon meningsfull felmeddelande från Firebase-gränssnittet.
