我将使用Firebase Auth和数据库模块来创建我的网络应用程序。但是,并非我希望我的应用程序所做的所有事情都只能在前端实现。因此,我还希望使用Python的Bottle框架后端处理请求,并使用Pyrebase访问Firebase数据库。
让我们说登录后我需要访问主页并查看个性化内容,例如我的笔记。它们以这种方式在DB中构建:
{
"notes": [{
"id": "1",
"title": "X",
"author": "user1"
},
{
"id": "2",
"title": "Y",
"author": "user2"
} and so on... ]
}
那么如何才能实现只在主页上显示我的文章?
我知道我需要根据author
值过滤我的笔记,但是如何让Bottle了解当前登录的用户?
我已经读过there,我应该以某种方式向后端服务器发送唯一令牌以验证当前用户,但是如何做到这一点?在每个链接中插入令牌作为GET参数似乎很愚蠢,但我认为没有其他方法可以实现它。
答案 0 :(得分:0)
首先组织数据库,使每个音符成为子对象:
{
"notes": {
"id1": {
"id": "id1",
"title": "X",
"author": "user1",
},
"id2": {
}
}
}
然后,这种特定的交互可以完全在客户端实现。只需执行查询即可过滤所需的注释。例如,在JS客户端中:
var uid = firebase.auth().currentUser.uid;
var query = ref.orderByChild('author').equalTo(uid);
// Listen for query value events
如果要在后端服务器上运行此操作,并且要确保只允许登录用户执行它,则必须在每次请求时将ID令牌从客户端应用程序传递到服务器。以下是使用Python Admin SDK实现服务器端逻辑的方法:
import firebase_admin
from firebase_admin import auth
from firebase_admin import db
token = '....' # Extract from the client request
try:
decoded = auth.verify_id_token(token)
uid = decoded.uid
ref = db.reference('path/to/notes')
notes = ref.order_by_child('author').equal_to(uid).get()
# Process notes response
except ValueError as ex:
print(ex)
# Send error to client