我正在使用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
Firebase: Permission denied - setValue()
How to refresh expired google sign-in logins?
https://firebase.google.com/docs/auth/web/google-signin#-nodejs-firebase-