Node.js 如何使用nodejs-express、firebase、firebase-admin获得在后端写入的权限?

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登录

我正在使用vue.js(前端)、nodejs和firebase(后端)创建web应用程序

我的问题是如何获得在后端(nodejs、firebase)中写入的权限

首先,我在关于数据库的规则下设置:

"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}) 
  })