在我的应用程序中,用户将输入昵称和密码。它将在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);
});
}
问题很明显。首次单击登录按钮时,快照功能记录的电子邮件地址仍未定义。您必须再次单击该按钮,才能记录电子邮件地址。
答案 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">