node.js - Firebase Auth,更改电子邮件后踢用户
问题描述
我在使用 Admin Firebase Sdk 时遇到问题,当我使用 Firebase Sdk 更改后端中的电子邮件时,当前用户已注销。这是我在后端的代码:
const updateUser = (request, response) => { //Aggiorna le info dell'utente, nome e biografia, l'email verrà gestita da firebase
const idToken = request.params.idToken
const {
fullname,
bio,
email
} = request.body
utils.firebase.auth().verifyIdToken(idToken) //verifico che il token sia vero
.then(function(decodedToken) {
let uid = decodedToken.uid //estrapolo lo uid dell'utente
//modifico l'email su firebase
utils.firebase.auth().updateUser(uid, {
email: email,
})
.then(function(userRecord) {
console.log("Firebase: Account aggiornato" + userRecord.toJSON())
//Ora faccio l'update sul mio database
utils.pool.query(
'UPDATE users SET fullname = $1, bio = $2 WHERE uid = $3', [fullname, bio, uid], (error, results) => {
if (error) {
throw error
}
response.status(200).send(`Ares: User modified with ID: ${results}`)
}
)
})
.catch(function(error) {
console.log('Error updating user:', error);
throw error
});
})
}
这是我的前端(反应):
const handleSubmitUpdate = (e) => {
//Chiamo il mio backend, chiedendo di modificare le info dell'utente
axios.put(`http://localhost:3001/users/` + context.currentUserToken, {
fullname: user_name,
bio: user_biography,
email: user_email
})
.then(res => {
console.log("User updated", res)
})
}
解决方案
发生这种情况的原因是 Firebase 使用 JWT(PKI 加密令牌)进行身份验证。JWT 的一部分是用户的电子邮件地址。如果电子邮件地址更改,则用户拥有的令牌将无法再进行身份验证,因为电子邮件地址将不匹配。
更改电子邮件地址后,您需要使用一种auth().signInWith...
方法再次登录用户。如果前端知道电子邮件已更改,则可以主动运行。否则,如果您收到对经过身份验证的请求的 401 响应,则可以运行它。
推荐阅读
- python - 从 pandas dropna 中排除特定列
- javascript - 如何导航到显示类似于 iOS 的“全屏”模式的反应原生屏幕
- flutter - Flutter / Dart ListView不显示snapshot.data
- xamarin - 添加 Firebase Analytics Nuget 后获取属性“buttonSize”已定义不兼容的格式错误
- python - 如何修复'str'对象在我的python3脚本中没有属性'read'
- flutter - Flutter snapshot.data() 始终为空
- python - 如何将整数值保存到文本文件
- php - 如何在 php 中获取导航菜单项?
- typescript - 这个打字稿代码中的“1”是什么意思?
- c# - 如何覆盖/修改 Frame 的 Content 属性以接受 Xamarin.Forms 中的多个视图?