Node.js 如何使用nodejs-express、firebase、firebase-admin获得在后端写入的权限?
我正在使用vue.js(前端)、nodejs和firebase(后端)创建web应用程序 我的问题是如何获得在后端(nodejs、firebase)中写入的权限 首先,我在关于数据库的规则下设置:Node.js 如何使用nodejs-express、firebase、firebase-admin获得在后端写入的权限?,node.js,firebase,firebase-realtime-database,firebase-authentication,firebase-admin,Node.js,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Admin,我正在使用vue.js(前端)、nodejs和firebase(后端)创建web应用程序 我的问题是如何获得在后端(nodejs、firebase)中写入的权限 首先,我在关于数据库的规则下设置: "users": { "$uid": { ".write": "$uid === auth.uid", ".read": "auth != null && auth.uid === $uid" } }, 其次,我成功地在前端(firebase、google登录
"users": {
"$uid": {
".write": "$uid === auth.uid",
".read": "auth != null && auth.uid === $uid"
}
},
其次,我成功地在前端(firebase、google登录)登录,并在后端验证了IdToken(credential.accessToken):
前端:
// Get logging user's idToken
firebase.auth().onAuthStateChanged((user) => {
if (user) {
userObj.user = user
firebase.auth().currentUser.getIdToken().then((idToken) => {
console.log(`idToken ==> ${idToken}`)
userObj.token = idToken
})
}
resolve(userObj)
})
// Send idToken to backend
HTTP.verifyUserToken(userObj.token)
.then((result) => {
console.log('verifyUserToken result ==> ', result)
localStorage.setItem('tkn_usr_og', JSON.stringify(result))
console.log('userObj.user')
console.log(userObj.user)
})
后端:
admin.auth().verifyIdToken(idToken)
.then(function(decodedToken) {
var uid = decodedToken.uid;
console.log(decodedToken);
res.status(200).json({success: true, result: decodedToken})
}).catch(function(error) {
// Handle error
console.log('verifyIdToken error');
console.log(error);
res.status(400).json({success: false, result: err})
});
第三,我可以从nodejs后端得到解码。解码后的通话数据包含在以下数据中:
{
iss: ~,
name: ~,
user_id: ~,
sub: ~,
iat: ~
....
},
然后,我尝试在后端编写firebase数据库
在“代码正在写入后端数据库(node.js)”下:
但是,将发出“权限被拒绝”错误
我如何解决这个问题
以下是我的参考链接:
您可以添加用于写入数据库的代码吗?请指定此代码是否与您的项目在一起。@AndréKool当然!下面的代码正在后台写入数据库(node.js)。const usersDV=usersDB.child(usrData.uid)console.log(
usersDV==>${usersDV}
);usersDV.set(usrData).然后(()=>{resolve(usrData.uid)}).catch((err)=>{reject({'writeUserData':err})})@AndréKool我能问你一个问题吗?我想在nodejs后端写一个数据。那么,是否有必要使用admin.auth().verifyIdToken(IdToken)验证IdToken?我不知道,我从未使用过nodejs或firebase的admin SDK。这种设计有些不太正确。为什么要在后端验证ID令牌,然后将解码的令牌发送回客户端?此时,您应该使用ADMINSDK访问数据库。
const usersDV = usersDB.child(usrData.uid)
console.log(usersDV ==> ${usersDV});
usersDV.set(usrData)
.then(() => {
resolve(usrData.uid)
})
.catch((err) => {
reject({'writeUserData':err})
})