gpt4 book ai didi

node.js - Firebase 实时数据库规则拒绝权限

转载 作者:行者123 更新时间:2023-12-02 12:17:24 25 4
gpt4 key购买 nike

我有一个使用 Kotlin 构建的应用程序,后端使用 Node.js。我允许用户在客户端应用程序上使用 Firebase 身份验证登录/注册。

该应用程序的部分功能是让用户通过 Firebase 的实时数据库在线保存数据。应用程序内部发生的事情是,一旦用户登录,我将他/她的 uid 传递到后端,后端向数据库发出请求。

当数据库规则允许所有人读/写时,一切正常。一旦我将它们更改为:

{
"rules": {
"users": {
".read": "auth != null && auth.uid != null",
".write": "auth != null && auth.uid != null",
}
}

我一直收到 Permission Denied。

我尝试了不同的规则:

  • 没有用户 key
  • 只检查 auth 不为 null

但似乎都不起作用。

我是否遗漏了某些步骤?

我已经梳理了许多类似的 StackOverflow 问题和 Firebase 的实时数据库文档,但没有找到我的问题的答案。

一些引用代码:

后端:

app.get('/someRoute', function (req, res) {
var database = firebase.database()
var uid = req.query.uid

database.ref('/users/' + uid).once('value')
.then(function(snapshot) {
var data = snapshot.val() ? snapshot.val() : []
res.status(200).send({ response: data})
}).catch(function(error) {
console.log(error)
res.status(500).json({ error: error})
})
})

客户:

fun loginUser(view : View) {
FirebaseAuth.getInstance().signInWithEmailAndPassword(userEmail, userPassword)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
updateFirebaseUserDisplayName()
} else {
Toast.makeText(this, "An error has occurred during login. Please try again later.", Toast.LENGTH_SHORT).show()
}
}
}

fun updateFirebaseUserDisplayName() {

FirebaseAuth.getInstance().currentUser?.apply {
val profileUpdates : UserProfileChangeRequest = UserProfileChangeRequest.Builder().setDisplayName(userEmail).build()
updateProfile(profileUpdates)?.addOnCompleteListener(OnCompleteListener {
when(it.isSuccessful) {
true -> apply {
Intent(this@LoginActivity, MainActivity::class.java).apply {
startActivity(this)
finish()
}
}
false -> Toast.makeText(this@LoginActivity, "Login has failed", Toast.LENGTH_SHORT).show()
}
})
}
}

最佳答案

经过一番搜索,我找到了解决问题的方法。

看来,因为我在客户端对用户进行身份验证,并且有一个与 Firebase 的实时数据库通信的后端,所以我不得不在后端使用 Firebase 的 Admin SDK

这是因为每次用户登录并在客户端进行身份验证时,都需要传递一个唯一的 token 。然后需要将此 token 发送到后端并在尝试访问实时数据库时使用。

对于偶然发现这个问题并想知道如何解决的其他人,请点击以下链接:

此外,请确保正确引用您的数据库名称

关于node.js - Firebase 实时数据库规则拒绝权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63835400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com