32

Firebase 简单登录提供了电子邮件/密码选项,我该如何使用它?从创建用户开始,为该用户存储数据,再到登录和注销。

4

2 回答 2

41

需要执行三个不同的步骤(假设您有 jQuery):

1. 设置您的回拨

var ref = new Firebase("https://demo.firebaseio-demo.com");
var authClient = new FirebaseAuthClient(ref, function(error, user) {
  if (error) {
    alert(error);
    return;
  }
  if (user) {
    // User is already logged in.
    doLogin(user);
  } else {
    // User is logged out.
    showLoginBox();
  }
});

2. 用户注册

function showLoginBox() {
  ...
  // Do whatever DOM operations you need to show the login/registration box.
  $("#registerButton").on("click", function() {
    var email = $("#email").val();
    var password = $("#password").val();
    authClient.createUser(email, password, function(error,  user) {
      if (!error) {
        doLogin(user);
      } else {
        alert(error);
      }
    });
  });
}

3.用户登录

function showLoginBox() {
  ...
  // Do whatever DOM operations you need to show the login/registration box.
  $("#loginButton").on("click", function() {
    authClient.login("password", {
      email: $("#email").val(),
      password: $("#password").val(),
      rememberMe: $("#rememberCheckbox").val()
    });
  });
}

登录成功完成后,将使用正确的用户对象调用您在步骤 1 中注册的调用,此时我们调用doLogin(user)您必须实现的方法。

用户数据的结构非常简单。它是一个包含以下属性的对象:

email: 用户的电子邮件地址 : 用户的 id唯一数字(自动递增)ID

FirebaseAuthClient 将自动为您验证您的 firebsae,无需进一步操作。您现在可以在安全规则中使用类似以下内容:

{
  "rules": {
    "users": {
      "$userid": {
        ".read": "auth.uid == $userid",
        ".write": "auth.uid == $userid"
      }
    }
  }
}

example.firebaseio-demo.com/users/42这意味着,如果我的用户 ID 是 42,那么只有我可以在- 当我登录时 -写或读- 而没有其他人。

请注意,除了用户的 ID 和电子邮件之外,简单登录不会存储有关用户的任何其他信息。如果你想存储关于用户的额外数据,你必须自己做(可能在成功回调中createUser)。您可以像通常在 Firebase 中存储任何数据一样存储这些数据 - 只需注意谁可以读取或写入这些数据!

于 2013-03-01T22:33:36.023 回答
4

以防有人访问此线程并寻找一些使用 firebase 身份验证的示例应用程序。这里有两个例子

var rootRef = new Firebase('https://docs-sandbox.firebaseio.com/web/uauth');
......
.....
....

http://jsfiddle.net/firebase/a221m6pb/embedded/result,js/

http://www.42id.com/articles/firebase-authentication-and-angular-js/

于 2015-05-04T03:11:00.337 回答