2016-11-15 2 views
0

So arbeite ich mit Firebase-Web-E-Mail-Authentifizierung und ich bin auf dieses Problem gestoßen. Firebase würde nur prüfen, ob das Passwort mit dem in der Datenbank übereinstimmt, WENN die E-Mail existiert. Wenn die E-Mail nicht existiert, gibt es keine Fehlermeldung und meldet die Person an. Ich habe mich gefragt, ob es eine Möglichkeit gibt, dies zu beheben, so dass Firebase jedes Mal, wenn die E-Mail existiert, überprüft und wenn es nicht eine Fehlermeldung gibt.Firebase überprüft nicht, ob E-Mail als Konto existiert

JavaScript

function SignUserIn() { 
    // Get elements 
    const txtEmail = document.getElementById("txtEmail"); 
    const txtPassword = document.getElementById("txtPassword"); 

    // Get email and pass 
    const email = txtEmail.value; 
    const password = txtPassword.value; 
    const auth = firebase.auth(); 

    //Sign In 
    firebase.auth().signInWithEmailAndPassword(email, password) 
     .catch(function(error) { 
      // Handle Errors here. 
      var errorCode = error.code; 
      var errorMessage = error.message; 
      if (errorCode === 'auth/wrong-password') { 
       window.alert('Wrong password.'); 
      } 
      else { 
       //Realtime listener 
       firebase.auth().onAuthStateChanged(frebaseUser => { 
        if (email) { 
         window.alert("You Are Successfully Signed In! Welcome " + email); 
         window.location = 'homepage.html'; //After successful login, user will be redirected to Homepage 
         sessionStorage.setItem("email", email); 
        } 
        else { 
         console.log('Not logged in'); 
         window.alert("Incorrect User/Password Please Try Again"); 
        } 
       }); 

       sessionStorage.setItem(email); 
      } 

     }); 
} 

HTML BODY

<div class="login-card"> 
       <div class="mlogo"><img src="LogoFINAL copy.png" alt="Medavance"> </div> 

       <h1 class="title">Welcome To Medavance! </h1> 
       <br> 
    <!------------------------------------- Start of Login --------------------------------------------> 
       <input type="email" id="txtEmail" placeholder="Email" required> 
       <input type="password" id="txtPassword" placeholder="Password" required> 
       <button id="btnLogin" class="btn btn-action" onclick="SignUserIn()"> Log in </button> 
       <div class="btn btn-secondary"><a href="NewAccount.html"> Sign Up</div> 
        </div> 
+0

_ „Firebase Authentifizierung macht den Aufbau sicherer Anwendung einfach“ _ - Teil sicher zu sein, ist _ ** nicht erzählen Menschen, ** _ sie das falsche Passwort haben. Sie sagen ihnen nicht "Ja, dieser Benutzer existiert, aber Sie haben das falsche Passwort". Sie sagen ihnen nicht "Nein, dieser Benutzer existiert nicht". Denn nur um gültige Benutzernamen zu finden, ist es halb so weit, Sie zu hacken. Sie sagen nur "Sie können sich nicht mit diesem Benutzernamen und Passwort anmelden". –

+0

@StephenP Okay, danke, dass ich das verstanden habe. Aber mein Hauptproblem ist, dass, wenn ich eine E-Mail gebe, die nicht in der Datenbank existiert, ich nicht die Fehlermeldung bekomme, sondern nur die Person anmelde, wie kann ich das vermeiden und zumindest die Person dazu bringen, das zu überprüfen Benutzer existiert und wenn Benutzer nicht existiert, erscheint die Fehlermeldung "Sie können nicht mit diesem Benutzernamen und Passwort angemeldet sein." . – SpiderMonkey

Antwort

0
firebase.auth().signInWithEmailAndPassword(email, password) 
.then(function() { 
    // Handle success here 
    firebase.auth().onAuthStateChanged(frebaseUser => { 
     sessionStorage.setItem("email", email); 
     window.alert("You Are Successfully Signed In! Welcome " + email); 
     window.location = "homepage.html"; 
    }); 
}, function(error) { 
    // Handle Errors here. 
    var errorMessage = error.message; 
    window.alert(errorMessage); 
    document.getElementById("txtPassword").value = ""; 
}); 

}

0

im doc Suche nach signInWithEmailAndPassword, sagt, es sollten Sie auth/user-not-found "ausgelöst, wenn kein Benutzer an die angegebene E-Mail entspricht," erhalten, aber Sie‘ Überprüfen Sie nicht in Ihrem Test if (errorCode === 'auth/wrong-password') dafür und führen Sie daher die else, die Erfolg scheint anzunehmen.

Wenn ich es richtig verstehe, sollte signInWithEmailAndPassword nur den .catch() Callback aufrufen, wenn ein Fehler auftritt, also sollten Sie sie nie anmelden, wenn sie aufgerufen wird.

Sie können den spezifischen errorCode überprüfen, um zu entscheiden, was als nächstes zu tun ist, aber nur in nach den Aufruf signInWithEmailAndPassword, nicht in der Catch-Funktion. Dies bedeutet auch, dass Ihr Fang verhindern muss, dass er weiter ausgeführt wird.

signInWithEmailAndPassword gibt auch ein Versprechen "Returns nicht-null firebase.Promise, die nicht-null firebase.User", dass Sie den Anruf folgende verwenden können, in dem Benutzer anmelden


Haftungsausschluss:. Dies ist Aus den Dokumenten habe ich Firebase.auth() nicht verwendet, um es zu testen.

Verwandte Themen