I'm creating web app using vue.js(Front-end), nodejs and firebase(Back-end).
My question is how to get permission to write in back-end(nodejs, firebase)?
First, I set under the rule about database:
"users": {
"$uid": {
".write": "$uid === auth.uid",
".read": "auth != null && auth.uid === $uid"
}
},
Second, I succeeded to sing-in on front-end(firebase, google sign-in) and verify IdToken(credential.accessToken) on the back-end:
Front-end:
// 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)
})
Back-end:
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})
});
Third, I can get decodedToken from nodejs back-end. decodedToken data is included under the data:
{
iss: ~,
name: ~,
user_id: ~,
sub: ~,
iat: ~
....
},
Then, I attempt to write firebase database in back-end.
Under code is Writing to database in backend (node.js):
const usersDV = usersDB.child(usrData.uid)
console.log(usersDV ==> ${usersDV});
usersDV.set(usrData)
.then(() => {
resolve(usrData.uid)
})
.catch((err) => {
reject({'writeUserData':err})
})
However, a Permission denied error is issued.
How can I solve this issue?
Below are my reference links:
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-