Firebase简单登录 - 我可以在用户删除其帐户时观看活动吗?

时间:2015-07-26 15:05:08

标签: firebase firebase-authentication

在我的应用中,任何用户(通过Firebase简单登录注册)都可以一次拥有3种可能状态中的1种,即activedeletedsuspended之一。我保持这样:

"users": {
  "simplelogin:1": {
    "username": "user1",
    "email": "user1@example.com",
    "status": "active"
  },
  // ...
}

任何涉及任何用户的活动都会检查他/她的状态,如果是deletedsuspended,则无法执行此操作。

通常,当用户选择从我的应用中删除他的帐户时,就像这样:

var ref = new Firebase("https://my-app.firebaseio.com");

ref.child('users/simplelogin:1/status').set('deleted', function (error) {
  if (!error) {
    ref.removeUser({
      email: "user1@example.com",
      password: "secretpassword"
    });
  }
});

问题是,用户可以先移除他/她的帐户而不将status更新为deleted。例如,这可以由用户在他自己的浏览器控制台上或在Node.js上完成:

var ref = new Firebase("https://my-app.firebaseio.com");

ref.removeUser({
   email: "user1@example.com",
   password: "secretpassword"
});

这样,用户就不会在Firebase上拥有自己的帐户,但我保留的用户status将保留active,因此我的应用将允许该用户的任何活动(例如有人向他发送礼物,如果他的status已正确更新为deleted,则不应该允许这样做。)这可能是一个问题。如果用户删除了他/她的帐户,如何将status更新为deleted

我想到的解决方案是定期运行cron作业来检查Firebase中的所有用户,尝试使用随机密码注册状态为deleted的用户并检查如果收到EMAIL_TAKEN错误。如果它可以注册,则表示用户已经删除了他/她的帐户,但Firebase中的status未更新为deleted。在这种情况下,它必须将状态更新为某些内容(例如suspiciousdeleted)并再次删除此新注册的帐户。我认为这可能是这样实现的:

// Assume this ref authenticated with admin privilege.
ref.child('users').on('child_added', function (snap) {
  var user = snap.val();

  if (user.status !== 'deleted') {
    // Assume _generateRandomPassword gives generated random password.
    var password = _generateRandomPassword();
    var credentials = {
      email: user.email,
      password: password
    };

    ref.createUser(credentials, function (error) {
      if (!error) {
        snap.ref().child('status').set('deleted');
        ref.removeUser(credentials);
      }
    });
  }
});

我认为这可能不是一个好的解决方案,因为系统必须为每个用户(没有deleted状态)运行,例如每天晚上。这个问题有更好的解决方案吗?

0 个答案:

没有答案