【问题标题】:Most ideal way to call firebase getIdToken调用firebase getIdToken的最理想方式
【发布时间】:2021-08-18 12:36:03
【问题描述】:

我正在我的 React 项目中借助 firebase 实现用户身份验证。所以,我对某些事情感到困惑。

我正在从 firebase 验证用户,然后在前端获取一个令牌,该令牌通过标头发送到后端并在那里验证一次。

我阅读了文档并了解到 firebase 令牌默认会在 1 小时后过期,因此我们必须像使用“getIdToken”一样

 firebase.auth().onAuthStateChanged(async user => {
      if (user) {
        console.log(user, 'user123 inside firebaseAuth')
        const token = await user.getIdToken()

        Cookies.set('my_token', token, { domain: domain })
      }
    })

但是我如何管理这个函数,我是否必须在每次组件更新或每次点击 api 或组件第一次渲染之前调用它?

问题是我不希望这个令牌在用户自己注销之前过期,即使他在不同的组件中并且坐得太久也是如此。

【问题讨论】:

    标签: javascript reactjs firebase firebase-authentication


    【解决方案1】:

    每次对服务器进行 API 调用时,您都可以获得 Firebase ID 令牌:

    async function callAPI() {
      const user = firebase.auth().currentUser
      if (user) {
        const token = await user.getIdToken()
        const res = await fetch("url", {
          headers: {authorization: `Bearer ${token}`}
        })
      } else {
        console.log("No user is logged in")
      }
    }
    

    您可以在组件挂载时获得一次 ID 令牌,但随后您必须处理 onIdTokenChanged 以使其在您的状态下保持更新。使用上述方法,您将始终获得有效的令牌。

    【讨论】:

    • 所以 onIdTokenChanged 可以在 didmount 上调用,并且在令牌刷新时始终运行?
    • @Ratnabhkumarrai 我对 React 不熟悉,但理想情况下,您希望确保 idTokenChanged 在页面加载时只运行一次。
    • 啊,我明白了,好吧
    猜你喜欢
    • 2018-09-18
    • 2018-09-20
    • 2019-05-21
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2016-01-15
    • 2012-09-30
    • 1970-01-01
    相关资源
    最近更新 更多