登录页面不工作(javascript、firebase)

登录页面不工作(javascript、firebase),javascript,firebase,Javascript,Firebase,救命啊! 我不确定发生了什么,但我的登录页面不工作。它只是重新加载,即使我输入了有效的用户/密码。 我认为问题在于它在我的数据结构、安全规则和app.js上遇到了问题,但我不知所措。 我得到了一个sinatra/ruby简单api来与用户和组一起工作(只是一个小项目) 以下是网站: 代码如下: $.post/("https://starter-vicks9985.firebaseapp.com/main.rb", { "name": "admin",

救命啊! 我不确定发生了什么,但我的登录页面不工作。它只是重新加载,即使我输入了有效的用户/密码。 我认为问题在于它在我的数据结构、安全规则和app.js上遇到了问题,但我不知所措。 我得到了一个sinatra/ruby简单api来与用户和组一起工作(只是一个小项目)

以下是网站:

代码如下:

$.post/("https://starter-vicks9985.firebaseapp.com/main.rb",
        {
        "name": "admin",
        "email": "admin@example.com",
        "password": "secret",
        "admin": true,
        "role-value": 99,
        }
 ), console.log("success");

{
    "rules": {
        ".read": true,
        "users": {
          "$user": {
            //can add a message if authenticated
            ".write": "auth.uid === $user"
          }
        },
        "rooms": {
            "$room": {
                "users": {
                    // can write to the users list only if ADMINISTRATOR
                    "$user": {
                        "write":"newData.parent().child(auth.uid).val() === 99"
                    }
                }
            }
        },
        "messages": {
          "$room": {
            "$message": {
                //can add a message if they are a MEMBER (if there was message/chat capability)
                ".write": "(!data.exists() && newData.exists() && root.child('rooms/' + $room + '/users/' + auth.uid).val() >= 10)"
            }
          }
        }
    }
}

$(document).ready(function() {

/**
*Set initial firebase ref. Use set to write in first admin user.
*/

var ref = new Firebase("https://starter-vicks9985.firebaseio.com/");
ref.set({
    "name": "Admin",
    "email": "admin@example.com",
    "password": "secret",
    "admin": true
});

/** Get email address from loginform, format email, get password
 * Firebase keys cannot have a period (.) in them, so this converts the emails to valid keys
 */
var emailAddress = function emailToKey(emailAddress){
  return btoa(emailAddress);
};
var password = document.getElementById('password');
/**
* Authorize user with email and password, passing in values from form.
*/
ref.authWithPassword({
  email    : emailAddress,
  password : password,
}, function(error, authData) {
  if (error) {
    console.log("Login Failed!", error);
  } else {
    return authData;
  }
});

/**
* If user is logged in (valid), redirect to user profile
*/

ref.onAuth(function(authData) {
    window.open="https://starter-vicks9985.firebaseio.com/userprofile/userprofile.html";

})

});

就像@ Kato所说,这是一个代码转储,所以请考虑创建一个MCVE。尽管如此,请先看看我下面的评论


你发布的代码
在浏览了您的代码之后,我看到了一些错误,我将指出:

1.您的jQuery post语法不正确,即使正确也无法工作。
  • 最重要的是,您正在向Ruby文件发出post请求。Firebase托管不是服务器,它托管的是静态文件。
  • 弗兰克看。他说:
Firebase托管是一种服务于所谓静态应用程序的产品,该应用程序仅由客户端解释的文件组成。Firebase的服务器不会解释您上传的任何代码。所以Firebase托管不适合托管Ruby on Rails应用程序

引述:

我们提供您所有的静态内容(html、js、图像等)

话虽如此,请看一看的jQuery文档

请参阅我对您的代码的评论:

它应该是什么样子的:

2.登录功能到底是怎么回事? 假设您修复了
数据结构.js:14
中的
未捕获的语法错误:意外的标记{

  • 如果查看控制台,您将看到
    未捕获错误:Firebase.authWithPassword失败:第一个参数必须包含类型为“string”的键“email”
  • 这是因为您正在将一个函数,
    emailAddress
    传递给
    .authWithPassword()
您这样声明
emailAddress()

var emailAddress = function emailToKey(emailAddress){
  return btoa(emailAddress);
};
因此,下面传递的是
email
参数
emailAddress()
,而不是作为电子邮件地址的字符串

ref.authWithPassword({
  email    : emailAddress,
  password : password,
}, function(error, authData) {
  if (error) {
    console.log("Login Failed!", error);
  } else {
    return authData;
  }
});
  • 最重要的是,页面加载后会立即调用所有这些登录函数。您的代码(
    app.js
    )中没有任何内容等待并响应表单的提交。

你网站上的代码
我也访问了你的页面,查看了你的源代码,发现了更多的问题

1.
index.HTML
同样的情况也适用于
post
对“组”的调用


  • 我希望这能提供一些明确性
  • 我建议阅读StackOverflow上的其他答案,如:
  • 并搜索更多答案,如:


最后,我建议做更多的研究和阅读文档:

Victoria,很高兴在StAdvExcel上看到你。这是一个代码转储,也是我们调试代码的一个要求,我们不能用这种分散的方式来做。要想在这里得到一个好的响应,或者在技术世界的任何地方,请考虑这个演示的价值。评估您的用例和问题。
var emailAddress = function emailToKey(emailAddress){
  return btoa(emailAddress);
};
ref.authWithPassword({
  email    : emailAddress,
  password : password,
}, function(error, authData) {
  if (error) {
    console.log("Login Failed!", error);
  } else {
    return authData;
  }
});
<section class="loginform cf">
  <form id= "login" form name="login" form type= "submit" accept-charset="utf-8">
<!--  extra^space    ^duplicate "form"^         ^again, space -->
  ...
  </form>
</section>
$.post/("https://starter-vicks9985.firebaseapp.com/main.rb",
     {
    "users"  //missing ':' after users
        //the following objects do not have keys - should be {"users":{"someUserKey1":{...},"someUserKey2":{...}}} etc.
        {
        "name": "admin",
        "email": "...",
        "password": "...",
        "admin": true,
        "role-value": 99,
        },
        {
        "name": "aaa",
        ...
        },
        {
        "name": "bbb",
        ...
        }
    },
), console.log("success");