【问题标题】:How to update email and sensitive data properly in Firebase?如何在 Firebase 中正确更新电子邮件和敏感数据?
【发布时间】:2021-12-04 14:44:55
【问题描述】:

我有一个代码,用户可以在其中更新他的凭据/个人信息,但是我遇到了一个问题并设法解决了它,它说第一个参数必须是一个字符串,我找到了一个解决方案,但是后来我得到了一个错误说"此操作很敏感,需要最近的身份验证。请重新登录,然后重试...

后来我在一些 cmets 中找到了我的 first solution 如下: user.reauthenticateWithCredential(auth.EmailAuthProvider.credential(user.email, user.password)).then(() => user.updateEmail(email)) 我尝试使用它,但无法正常工作,之后出现其他错误,想知道这是过时的还是我做错了。

代码

我从我的 firebase.js 获得我的身份验证

const db = firebase.firestore();
const auth = firebase.auth();
const storage = firebase.storage();

我从我的 App.js 获取我的用户,然后如果我需要它,我只需像这样发送它:

function App() {

const [user, setUser] = useState([]);

  useEffect(() => {
    auth.onAuthStateChanged((authUser) => {

      if (authUser) {
        setUser(authUser);
      } else {
        setUser(false);
      }
    })
  }, [])

return (
....
<Route path = "/Update_Profile">
            <Inicio user={user}/>
            <UpdateProfile user={user}/>
          </Route>
...
)}

export default App;

const updateEmail = (e) => {
        e.preventDefault();
        
        if (user && (email != "")) {
            user.reauthenticateWithCredential(auth.EmailAuthProvider.credential(user.email, user.password))
            .then(() => user.updateEmail(email))
            
            const ref = db.collection("usuarios").doc(user.uid)
            ref.update({
                email: email
            })
        } else {
            //User is not logged in, handle that case here
        }
    }

【问题讨论】:

  • 请包括您定义userauth 对象的位置。
  • 我刚刚添加了它
  • 您应该研究如何利用React Contexts 将您的用户传递给子组件。 here 包含了一个有点复杂但功能强大的用户上下文示例。由于这似乎是一个新项目,您还应该改用modular Firebase SDK

标签: javascript firebase firebase-authentication


【解决方案1】:

因为 authAuth 模块的实例,而不是 Firebase Web SDK 中的 Auth 模块的命名空间(因为您使用过 const auth = firebase.auth() ),下面的值为undefined

auth.EmailAuthProvider

这是因为firebase.auth.Auth class 没有定义属性EmailAuthProvider。这意味着 JavaScript 会尝试调用 undefined.credential(...) 并引发错误。

要访问EmailAuthProvider class,您需要直接从firebase.auth 命名空间访问它:

firebase.auth.EmailAuthProvider

总之,

firebase.auth !== firebase.auth()

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2011-07-07
    • 2019-02-28
    • 2012-06-22
    • 1970-01-01
    • 2020-09-30
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多