2016-11-15 15 views
0

Firebaseの電子メール認証で作業しています。 Firebaseは、電子メールが存在する場合、パスワードがデータベース内のパスワードと一致するかどうかをチェックするだけです。電子メールが存在しない場合は、エラーメッセージが表示されず、その人にサインインされません。 Firebaseがメールが存在するたびにチェックし、エラーメッセージを返さないようにするために、これを修正する方法があるかどうか疑問に思っていました。 signInWithEmailAndPasswordのためにドキュメントを見てみるとFirebaseは電子メールをアカウントとしてチェックしません

は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認証が簡単にセキュアなアプリケーションを構築します" - 安全であるの一部が_ ** _彼らは間違ったパスワードを持っている人を語っていません。あなたは彼らに「はい、そのユーザーは存在しますが、間違ったパスワードを持っている」とは言いません。あなたは彼らに「いいえ、そのユーザーは存在しない」とは言わない。有効なユーザー名を見つけるだけで、あなたをハッキングすることの半分です。 「あなたはそのユーザー名とパスワードでログインできません」とだけ伝えます。 –

+0

@StephenPよろしくお願いいたします。しかし、私の主な問題は、データベースに存在しない電子メールを入力すると、エラーメッセージが表示されず、人にサインインされます。どうすれば避けられますか?ユーザーが存在しない場合は、「そのユーザー名とパスワードでログインすることはできません」というエラーメッセージを表示します。 。 – SpiderMonkey

答えて

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

、それはあなたがauth/user-not-foundは、 "指定したメールに対応するユーザが存在しない場合にスローさ" を取得する必要がありますと言うが、あなたあなたのテストでそれをチェックしないでくださいif (errorCode === 'auth/wrong-password')そしてあなたはelseを実行します。これは成功すると思われます。

私が正しく理解していれば、signInWithEmailAndPasswordはエラーがある場合にのみ.catch()コールバックを呼び出す必要があります。コールされた場合はログインしないでください。

特定のerrorCodeを確認して、次の処理を決定することができますが、の後に、というsignInWithEmailAndPasswordコールの後にログを記録するだけです。これはまた、あなたのキャッチがそれの後に実行し続けるのを防ぐ必要があることを意味します。

signInWithEmailAndPasswordはまた、あなたがユーザのログイン処理を呼び出し、次の使用することができます「null以外firebase.Userを含む返し null以外firebase.Promise約束を返し


免責事項:これがすべてですドキュメントから、firebase.auth()を使ってテストしていません。

関連する問題