javascript - 创建用户,保存数据,然后更改页面

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

我正在尝试在我的网页上创建“创建用户”功能。创建用户时,它同时存储用户写入的数据,例如姓名等。这样做后,应该向用户显示一个仅供用户使用的页面,问题在于我的代码在用户数据(姓名等)之前。 )被存储后,用户将看到一个新页面。我怎样才能防止这种情况发生?

我的创建用户功能:

firebase.auth().createUserWithEmailAndPassword(email, pass).then(function() {
  // User is created
  const imageUrl = "images/genericProfilePicture.png";
  const admin = false;
  const currentTime = timeStamp();

  var user = firebase.auth().currentUser;
  const userId = user.uid;


  firebase.database().ref('users/' + userId).set({
    name: name,
    email: email,
    address: address,
    zip: zip,
    city: city,
    department: department,
    membership: membership,
    admin: admin,
    added: currentTime,
    profile_picture : imageUrl
  });

  window.open('frontpage.php', '_top');


}).catch(function(error) {
  // Error has happened
  var errorCode = error.code;
  var errorMessage = error.message;

  alert(errorMessage);
});

尝试了这段代码,没有任何运气,没有存储数据,也没有显示新页面:

firebase.database().ref('users/' + userId).set({
								name: name,
								email: email,
								address: address,
								zip: zip,
								city: city,
								department: department,
								membership: membership,
								admin: admin,
								added: currentTime,
								profile_picture : imageUrl
							}).then(() => {
    						window.open('frontpage.php', '_top');
  						});

最佳答案

选项 1:

只需将 set()then() block 链接起来即可:

firebase.database().ref('users/' + userId).set({
    name: name,
    email: email,
    address: address,
    zip: zip,
    city: city,
    department: department,
    membership: membership,
    admin: admin,
    added: currentTime,
    profile_picture : imageUrl
  }).then(function(){
        window.open('frontpage.php', '_top');
    }) ...

选项 2:(如果您确实需要验证某些用户详细信息)

您可以检查用户是否已添加到数据库中,然后显示该窗口。

类似于:

function getUserStatus(uid) {
    return firebase.database().ref('/users/' + uid).once('value').then(function(snapshot) {
        if (snapshot.val() != null) {
            return snapshot.val().name;
        }
        return '';
    });
}

您可以在代码中链接此方法:

firebase.database().ref('users/' + userId).set({
    name: name,
    email: email,
    address: address,
    zip: zip,
    city: city,
    department: department,
    membership: membership,
    admin: admin,
    added: currentTime,
    profile_picture : imageUrl
  });

getUserStatus(user.uid).then(function(name) {
    if (name !== '') {
       window.open('frontpage.php', '_top');
    }
});

关于javascript - 创建用户,保存数据,然后更改页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45569510/

相关文章:

java - 调用 AuthUI.getInstance().delete() 时 AuthUI 正在删除什么?

firebase - 如何保护 firebase Cloud Function HTTP 端点以仅允许经过 Firebase 身份验证的用户?

javascript - 在绝对定位的模态中滑动

javascript - 如何将参数传递到 Backbone 集合并重置

javascript - Typescript 中的日期时间时区转换问题

javascript - 无法对 POST 请求进行 GET

firebase - 如何在 Cloud Firestore 中保存来自 Cloud Function 的文档引用?

android - 为什么我在 Firebase 崩溃报告中看不到日志

android - 如何在 Firebase 的每个段落中创建换行符?

node.js - 每当子创建云函数实时数据库时添加父子