Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Firebase验证,更改电子邮件后踢用户_Node.js_Reactjs_Firebase Authentication - Fatal编程技术网

Node.js Firebase验证,更改电子邮件后踢用户

Node.js Firebase验证,更改电子邮件后踢用户,node.js,reactjs,firebase-authentication,Node.js,Reactjs,Firebase Authentication,我在使用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 c

我在使用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
        });
    })
}
这是我的前端(React):


发生这种情况的原因是Firebase使用JWT(PKI加密令牌)进行身份验证。JWT的一部分是用户的电子邮件地址。如果电子邮件地址更改,则用户拥有的令牌将无法再进行身份验证,因为电子邮件地址不匹配


更改电子邮件地址后,您需要使用
auth().signInWith…
方法再次登录用户。如果前端知道电子邮件已更改,则可以主动运行。否则,如果您收到401对经过身份验证的请求的响应,您可以运行它。

好的,但对于重新验证用户,我也需要密码,在用户首次登录时存储用户密码是安全的,然后在他更改电子邮件时使用它重新验证??这可能不安全。用户需要在更改电子邮件后再次通过登录流。i、 e.…
auth()。使用弹出窗口(提供程序)进行登录。
或同等功能。。。基本上,无论您第一次在MMH中登录用户时做了什么,但对用户来说都很烦人。如果用户每次都需要重新验证,没有其他方法可以在不再次询问密码和电子邮件的情况下重新验证?每次用户更改电子邮件地址时?就像我说的。。。。Firebase auth使用JWT,JWT访问令牌包括电子邮件地址。如果用户的电子邮件地址更改,则JWT访问令牌不再有效。
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)
    })
}