JavaScript:必须单击两次登录按钮才能显示电子邮件

时间:2018-08-11 14:19:13

标签: javascript database firebase firebase-realtime-database firebase-authentication

在我的应用程序中,用户将输入昵称和密码。它将在Firebase数据库中搜索相应的电子邮件,然后使用Firebase登录。

HTML:

<input type="text" name="" id="nickname" placeholder="nickname">
<input type="password" name="" id="pass" placeholder="******">
<input type='submit' onclick="Login();" value="Sign in" id="sign" class="btn">

JavaScript:

function Login() {
    const auth = firebase.auth();
    const nickname = document.getElementById('nickname').value;
    const pass = document.getElementById('pass').value;
    var emails;
    const ref = firebase.database().ref("userlist").child(nickname).on("value", function(snapshot) {
        emails = snapshot.val().email;
    });
    const connect = auth.signInWithEmailAndPassword(emails, pass).then(function() {

        alert(" You are now logged in.");
        sessionStorage.setItem("nickname", nickname);
    });
}

问题很明显。首次单击登录按钮时,快照功能记录的电子邮件地址仍未定义。您必须再次单击该按钮,才能记录电子邮件地址。

2 个答案:

答案 0 :(得分:0)

以下应该可以解决问题。

由于您只需要读取一次class CustomerData { private int id; private Customer customer; private String title; private String forename; private String surname; public CustomerData(Customer customer, String title, String forename, String surname) { this.customer = customer; this.title = title; this.forename = forename; this.surname = surname; } public String getTitle() { return this.title; } public String getForename() { return this.forename; } public String getSurname() { return this.surname; } } 数据库节点的值,因此请使用once()方法。调用Set-WUSettings处理程序时,由nickname返回的承诺解析后,您可以获取then()值并将其用作once()方法的参数。

emails

答案 1 :(得分:0)

尝试更改此内容:

<input type='submit' onclick="Login();" value="Sign in" id="sign" class="btn">

对此:

<input type='submit' (onclick)="Login();" value="Sign in" id="sign" class="btn">