如何使用nodejs express,firebase,firebase-admin获得后端写入权限?

时间:2018-04-16 12:06:44

标签: 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登录)进行了唱歌,并在后端验证了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后端获得decodeToken。 decodeToken数据包含在数据中:

{
  iss: ~,
  name: ~,
  user_id: ~,
  sub: ~,
  iat: ~
  ....
},

然后,我尝试在后端编写firebase数据库。

代码是在后端(node.js)写入数据库:

const usersDV = usersDB.child(usrData.uid) 
console.log(usersDV ==> ${usersDV}); 
usersDV.set(usrData) 
  .then(() => { 
    resolve(usrData.uid) 
  }) 
  .catch((err) => { 
    reject({'writeUserData':err}) 
  })

但是,发出了Permission denied错误。

我该如何解决这个问题?

以下是我的参考链接:

https://firebase.google.com/docs/auth/admin/verify-id-tokens

Refresh Firebase Token

Firebase: Permission denied - setValue()

How to refresh expired google sign-in logins?

https://firebase.google.com/docs/auth/web/google-signin#-nodejs-firebase-

0 个答案:

没有答案