简体   繁体   English

在现有令牌过期后,如何使用 firebase 刷新令牌请求新的访问令牌?

[英]How can I request a new access token after the existing token expires with the firebase refresh token?

I have a react app and I am using firebase auth for authentication.我有一个反应应用程序,我正在使用 firebase auth 进行身份验证。 I have an auth context and everything works great.我有一个身份验证上下文,一切都很好。 The issue is after 1 hour, the token expires and since we are using our auth token for api authentication the apis fail to work after one hour.问题是 1 小时后,令牌过期,由于我们使用我们的身份验证令牌进行 api 身份验证,API 在一小时后无法工作。 How can I monitor when the token expires, and request a new one using the refresh token that is in firebase?如何监控令牌何时过期,并使用 firebase 中的刷新令牌请求新令牌?

 useEffect(() => {
    const unsubscribe = auth.onAuthStateChanged((user) => {
      if (user) {
        const lastSignInTime = new Date(user.metadata.lastSignInTime);
        const lastSignInTimeTimeStamp = Math.round(lastSignInTime.getTime() / 1000);
        const yesterdayTimeStamp = Math.round(new Date().getTime() / 1000) - 24 * 3600;

        if (lastSignInTimeTimeStamp < yesterdayTimeStamp) {
          logout();
          setCurrentUser({
            ...currentUser,
            user: null,
            isVerified: false,
            email: '',
            accessToken: '',
          });
          return false;
        }
      }
      setCurrentUser({
        ...currentUser,
        user: user || null,
        isVerified: user ? user.emailVerified : false,
        email: user ? user.email : '',
        accessToken: user ? user.Aa : '',
      });
      setLoading(false);
    });
    return unsubscribe;
  }, []);

We do have a method like onAuthStateChanged我们确实有类似onAuthStateChanged的方法

auth.onIdTokenChanged(async (user) => {
      const token = await user?.getIdToken();
      localStorage.setItem("firebase_token_id", token);
});

Store the new token in your preferred storage and later call API with it.将新令牌存储在您的首选存储中,然后使用它调用 API。

Reference: https://firebase.google.com/docs/reference/js/v8/firebase.auth.Auth#onidtokenchanged参考: https://firebase.google.com/docs/reference/js/v8/firebase.auth.Auth#onidtokenchanged

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM