如何从用户操作中保护Firebase帐户等?

时间:2017-05-02 08:16:34

标签: node.js firebase firebase-authentication firebase-security google-cloud-functions

我正在使用Firebase和一些运行在Google App Engine上的Node.JS作为后端开发一个爱好项目。我是这个领域的真正新手,一个月前也听说过Firebase。

我的问题涉及如何通过用户操作保护各种“事物”,即使Firebase在客户端以JS身份运行。

我知道可以使用逻辑规则来保护数据库和存储 - 这就是适用的。

我的问题更关心用户可以使用firebase.auth()和类似的操作,例如:

  • firebase.auth()。createUserWithEmailAndPassword()
  • firebase.auth()。currentUser.delete()
  • firebase.auth()。currentUser.link()

正如我从下面链接的问题中理解的那样,没有解决方案 - 用户将始终能够调用这些功能,并且由于他们无法触及其他用户帐户,因此被认为是低风险的。 "prevent firebase user from deleting himself"

我担心无法阻止用户执行这些操作是因为我无法对数据库执行相关更改。对于一些基本用例,我认为很容易设置每晚批量工作来清理,但我担心未来会出现更复杂的问题。

我目前采取原子行动的解决方案,例如:删除用户帐户并删除DB中的用户数据,就是向我的后端Node.JS服务器发送请求。这很好,但是据我所知,用户可以通过这个并请求例如currentUser.delete()由他/她自己。另一种情况是用户取消链接谷歌帐户。我希望用户注销,但是使用该用户可以取消与后续操作的链接。

问题:我误解了什么吗?这可以很容易地防止,或者是否所有可用的行动都被认为是无害的,我应该进行聪明的清理等等?如果无法阻止,您是否还有比夜间批处理工作更聪明的建议?

1 个答案:

答案 0 :(得分:0)

使用firebase的云功能,您可以触发用户删除功能。这样,每次删除用户时,都可以运行代码进行清理。无论如何调用用户删除。

exports.removeUserFromDatabase = functions.auth.user().onDelete(function(event) {
    // Get the uid of the deleted user.
    var uid = event.data.uid;

    // Remove the user from your Realtime Database's /users node.
    return admin.database().ref("/users/" + uid).remove();
});

" onCreate"同样如此。查看他们的文档 https://firebase.google.com/docs/auth/extend-with-functions