Аутентификация Firebase не работает с HTML-элементом формы - PullRequest
0 голосов
/ 28 мая 2018

Я слежу за примерами Firebase, использующими веб-аутентификацию, и не могу войти, если использую текстовые поля и кнопки внутри элемента формы html.

Вот HTML:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Login</title>
        <script src="https://www.gstatic.com/firebasejs/5.0.1/firebase.js"></script>
    </head>
    <body>
        <form id="app">
        <input type="email" id="txtEmail" placeholder="Email">
        <input type="password" id="txtPassword" placeholder="Password">
        <button id="btnLogin">Login</button>
        <button id="btnSignUp">SignUp</button>
        <button id="btnLogout">Logout</button>
</form>

    </body>

    <script src="app.js"></script>
</html>

И JS:

(function() {

    // Initialize Firebase
    const config = {
      apiKey: "MyData",
      authDomain: "MyData",
      databaseURL: "MyData",
      projectId: "MyData",
      storageBucket: "MyData",
      messagingSenderId: "MyData"
    };
    firebase.initializeApp(config);

    const txtEmail = document.getElementById('txtEmail');
    const txtPassword = document.getElementById('txtPassword');
    const btnLogin = document.getElementById('btnLogin');
    const btnSignUp = document.getElementById('btnSignUp');
    const btnLogout = document.getElementById('btnLogout');

    btnLogin.addEventListener('click', e => {
        const email = txtEmail.value;
        const pass = txtPassword.value;
        const auth = firebase.auth();

        const promise = auth.signInWithEmailAndPassword(email, pass);
        promise.catch(e => console.log(e.message));

    });

    btnSignUp.addEventListener('click', e => {
        const email = txtEmail.value;
        const pass = txtPassword.value;
        const auth = firebase.auth();

        const promise = auth.createUserWithEmailAndPassword(email, pass);

        promise
        .catch(e => console.log(e.message));

    });

    btnLogout.addEventListener('click', e => {
        firebase.auth().signOut();
    });

    firebase.auth().onAuthStateChanged(firebaseUser => {
        if(firebaseUser){
            console.log(firebaseUser);
            btnLogout.style.display = 'block';
        } else {
            console.log('not logged in');
            btnLogout.style.display = 'none';
        }
    });


}());

Когда я пытаюсь войти в систему, в журнале консоли появляется следующее сообщение:

"Похоже, вы используете сборку разработкиFirebase JS SDK. При развертывании приложений Firebase в рабочей среде рекомендуется импортировать только отдельные компоненты SDK, которые вы собираетесь использовать. Для сборок CDN они доступны следующим образом (замените именем компонента - то есть auth)., база данных и т. д.): https://www.gstatic.com/firebasejs/5.0.0/firebase-.js"

Если переместить входы и кнопки за пределы элемента формы, логин работает отлично.

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Посмотрите на этот файл index.html, чтобы я мог без проблем войти в систему, потому что я прокомментировал элемент формы.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Login</title>
        <script src="https://www.gstatic.com/firebasejs/5.0.1/firebase.js"></script>
    </head>
    <body>
       <!-- <form id="app"> -->
        <input type="email" id="txtEmail" placeholder="Email">
        <input type="password" id="txtPassword" placeholder="Password">
        <button id="btnLogin">Login</button>
        <button id="btnSignUp">SignUp</button>
        <button id="btnLogout">Logout</button>
   <!-- </form> -->

    </body>

    <script src="app.js"></script>
</html>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Login</title>
        <script src="https://www.gstatic.com/firebasejs/5.0.1/firebase.js"></script>
    </head>
    <body>
        <form id="app">
        <input type="email" id="txtEmail" placeholder="Email">
        <input type="password" id="txtPassword" placeholder="Password">
        <button id="btnLogin">Login</button>
        <button id="btnSignUp">SignUp</button>
        <button id="btnLogout">Logout</button>
</form>

    </body>

    <script src="app.js"></script>
</html>

Но использование html, подобного тому, которое я опубликовал изначально (с использованием элемента формы), приводит к следующей ошибке для консоли:

"Сетьпроизошла ошибка (например, истекло время ожидания, прервано соединение или недоступен хост). "

0 голосов
/ 28 мая 2018

В вашем случае лучше всего использовать Firebase UI с CDN вместо npm и bower

Без забот и недоразумений, без ошибок (я имею в виду, меньше зависит от нашего навыка)

  1. Добавить проверку подлинности Firebase в ваше веб-приложение.

Включить FirebaseUI через CDN:

Включить следующий тег и файл CSS в тег вашей страницы под фрагментом инициализации:

<script src="https://cdn.firebase.com/libs/firebaseui/2.5.1/firebaseui.js"></script>
<link type="text/css" rel="stylesheet" href="https://cdn.firebase.com/libs/firebaseui/2.5.1/firebaseui.css" />

В консоли Firebase откройте раздел Аутентификация и включите аутентификацию электронной почты и пароля.

ui.start ('# firebaseui-auth-container', {signInOptions: [firebase.auth.EmailAuthProvider.PROVIDER_ID], // Другие параметры конфигурации ...});

Другие поставщики:

ui.start ('# firebaseui-auth-container', {signInOptions: [// Список поддерживаемых OAuth-провайдеров. firebase.auth.GoogleAuthProvider.PROVIDER_ID, firebase.auth.FacebookAuthProvider.PROVIDER_ID, firebase.auth.TwitterAuthProvider.PROVIDER_ID, firebase.auth.G_RID.INF..});

Для получения дополнительной информации, пожалуйста, перейдите по этой ссылке: https://firebase.google.com/docs/auth/web/firebaseui

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...