Firebase网络电话号码身份验证无效

时间:2017-11-29 12:11:49

标签: javascript firebase firebase-authentication

我一直在谷歌搜索2天的html和JavaScript代码,用于在我的网站中添加firebase电话号码身份验证。 我看到firebaseui做这个工作。 但它有自己的形式元素。 我没有找到任何文章或视频,显示“如何使用电话号码制作Firebase网站身份验证,而不使用Firebaseui / nodejs。 用我自己的文本框和其他按钮真的可以做到这一点吗? 我已为此编写了一个代码,但它无效。 请做一个检查或更喜欢任何最好的文章,显示我想要的确切的事情。 代码:

<!DOCTYPE html>
<html lang="en">
   <head>
      <title>Untitled</title>
      <script src="https://www.gstatic.com/firebasejs/4.6.2/firebase.js"></script>
      <script>
  // Initialize Firebase
  var config = {
    apiKey: "*****",
    authDomain: "********.firebaseapp.com",
    databaseURL: "https://********.firebaseio.com",
    projectId: "*******",
    storageBucket: "*********.appspot.com",
    messagingSenderId: "**********"
  };
  firebase.initializeApp(config);
      </script>
   </head>
   <body>
            <script>
var phoneNumber = getPhoneNumberFromUserInput();
var appVerifier = window.recaptchaVerifier;
firebase.auth().signInWithPhoneNumber(phoneNumber, appVerifier)
.then(function (confirmationResult) {
    alert('sms sent');
// SMS sent. Prompt user to type the code from the message, then sign the
// user in with confirmationResult.confirm(code).
window.confirmationResult = confirmationResult;
}).catch(function (error) {
// Error; SMS not sent
// ...
alert('sms not send');
});
      </script>
      <form>
      <input type="tel" id="number">
        <input type="number" id="otp_code">
        <input type="submit">
        </form>
   </body>
</html>

提前致谢。

2 个答案:

答案 0 :(得分:0)

有很多示例,包括Firebase GitHub示例快速入门应用:https://github.com/firebase/quickstart-js/blob/master/auth/phone-invisible.html

另请查看官方文档:https://firebase.google.com/docs/auth/web/phone-auth

以下是使用电话号码登录用户的快速摘要:

firebase.auth().signInWithPhoneNumber("+xxxxxxxx", window.recaptchaVerifier)
  .then((confirmationResult) => {
    // At this point SMS is sent. Ask user for code.
    let code = window.prompt('Please enter the 6 digit code');
    return confirmationResult.confirm(code);
  })
  .then((result) {
    // User is now signed in and accessible via result.user.
  });
  .catch((error) => {
    // Error occurred.
  });

答案 1 :(得分:0)

   # Try This Code. I have only add js/jquery code#
    <script>
  // Paste the config your copied earlier
   var firebaseConfig = {
    apiKey: "############################",
    authDomain: "############################",
    databaseURL: "############################",
    projectId: "############################",
    storageBucket: "############################",
    messagingSenderId: "############################",
    appId: "############################",
    measurementId: "############################"
  };
  firebase.initializeApp(firebaseConfig);
  // Create a Recaptcha verifier instance globally
  // Calls submitPhoneNumberAuth() when the captcha is verified
 //set size: "normal" to add recaptcha
  window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier(
    "recaptcha-container",
    {
      size: "invisible",
      callback: function(response) {
        submitPhoneNumberAuth();
      }
    }
  );
  // This function runs when the 'sign-in-button' is clicked
  // Takes the value from the 'phoneNumber' input and sends SMS to that phone number
function submitPhoneNumberAuth() {
    $("#wait").css("display", "block");
    $("#sign-in-button").attr("disabled", true);
    var userPhone = document.getElementById("phoneNumber").value;
    if(userPhone.length != 11){
        $("#message").removeClass("alert-info");
        $("#message").addClass("alert-danger");
        $("#message").html("Please Insert 11 digit Phone Number!!!");
        $("#message").css("display", "block");
        $("#wait").css("display", "none");
        $("#sign-in-button").attr("disabled", false);
        return false;
    }
    var phoneNumber = "+88"+userPhone;
    //+88 only for bangladesh.Add your own country code
    var appVerifier = window.recaptchaVerifier;
    firebase
      .auth()
      .signInWithPhoneNumber(phoneNumber, appVerifier)
      .then(function(confirmationResult) {
        document.getElementById('codeDiv').style.display='block'; 
        document.getElementById('getCodeButton').style.display='none';
        window.confirmationResult = confirmationResult;
        $("#message").html("Please check your inbox and insert code!!!");
        $("#message").css("display", "block");
        $("#wait").css("display", "none");
    })
    .catch(function(error) {
        $("#sign-in-button").attr("disabled", false);
        $("#wait").css("display", "none");
        console.log(error.code);
        if(error.code == 'auth/invalid-phone-number'){
            $("#message").removeClass("alert-info");
            $("#message").addClass("alert-danger");
            $("#message").html("Invalid Phone Number!! Try Another Number!!!");
            $("#message").css("display", "block");
            document.getElementById('getCodeButton').style.display='block';
            document.getElementById('codeDiv').style.display='none';
        }
        else if(error.code == 'auth/too-many-requests'){
            $("#message").removeClass("alert-info");
            $("#message").addClass("alert-danger");
            $("#message").html("Too many request from this number. Try Another Number!!");
            $("#message").css("display", "block");
            document.getElementById('getCodeButton').style.display='block';
            document.getElementById('codeDiv').style.display='none';
        }

      });
  }
  // This function runs when the 'confirm-code' button is clicked
  // Takes the value from the 'code' input and submits the code to verify the phone number
  // Return a user object if the authentication was successful, and auth is complete
function submitPhoneNumberAuthCode() {
    $("#wait").css("display", "block");
    $('#confirm-code').attr("disabled", true);
    var code = document.getElementById("code").value;
    confirmationResult
      .confirm(code)
      .then(function(result) {
        var user = result.user;
        $("#wait").css("display", "block");
        $("#message").removeClass("alert-danger");
        $("#message").addClass("alert-info");
        $("#message").html("Thank you!!Code Matched!!");
        $("#message").css("display", "block");
      })
      .catch(function(error) {
        $("#wait").css("display", "none");
        $('#confirm-code').attr("disabled", false);
        console.log(error);
        $("#message").removeClass("alert-info");
        $("#message").addClass("alert-danger");
        $("#message").html("Code Not Matched!!!");
        $("#message").css("display", "block");
      });
  }
  //This function runs everytime the auth state changes. Use to verify if the user is logged in
  firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
        //You are logged IN from firebase
        $("#message").removeClass("alert-danger");
        $("#message").addClass("alert-info");
        $("#message").html("Congratulations!!!Logging...");
        $("#message").css("display", "block");
        var phone = user.phoneNumber;
        firebase.auth().signOut().then(function() {
         ////You are logged Out from firebase
         console.log("Firebase Signout");
        }).catch(function(error) {
         console.log("Firebase Signout Problem!!");

        });

}