说我的Firebase数据库规则如下所示:
"rules": {
".read": "auth != null",
".write": "auth != null"
}
在我的应用程序中,我需要检查是否已经使用了用户名,因此我需要在对用户进行身份验证之前这样做。我知道我可以这样做:
"rules": {
".write": "auth != null",
"Users": {
".read": true
}
}
但是,如果我已经理解了规则如何正常工作,那么只会使“用户”路径可读,默认情况下,每个其他路径都将设置为".read": false
。因此,我的问题是如何使经过身份验证的用户可以读取每个路径,并使未经身份验证的用户只能从“用户”路径中读取数据,而不是其他任何内容。
答案 0 :(得分:1)
当然你可以这样做,因此未经身份验证的用户可以读取数据库中的一个路径,但我不推荐它。允许任何人阅读所有用户的用户名是不理想的。
另一个选择是您可以先创建用户,然后让他们在经过身份验证后选择用户名,但是您必须弄清楚如何处理经过身份验证的用户,然后在选择用户名之前退出应用程序
更好的选择是使用Cloud Functions for Firebase和HTTP触发器,并将所需的用户名作为请求的一部分传递。该请求将包括对所需用户名的查询,并且响应将返回用户名是否可用。它可能看起来像这样:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.uniqueUsername = functions.https.onRequest((req, res) => {
const username = req.query.username
admin.database().ref('users').orderByChild('username').equalTo(username)once('value').then(snap => {
// if the child exists, then the username is taken
if (snap.exists()) {
res.send('username not available');
} else {
res.send('username available');
}
})
}
如果您不熟悉Cloud Functions for Firebase,请查看以下资源:
Getting Started with Cloud Functions for Firebase - YouTube
Cloud Functions for Firebase Documentation
Timing Cloud Functions for Firebase using an HTTP Trigger and Cron - YouTube