代码之家  ›  专栏  ›  技术社区  ›  Pratik Tiwari

如何使用React Firebase 9和清单版本3验证chrome扩展的Google登录?

  •  0
  • Pratik Tiwari  · 技术社区  · 3 年前

    我一直在开发Firebase 9和React应用程序,我需要通过Firebase进行谷歌登录。从我的学习中,我知道Firebase现在不支持manifest.json版本3的谷歌登录。

    我发现了一些人们在处理身份问题上的技巧。我已经想出了解决办法,但我仍然被困在一个问题上。

    如何让Google Auth与React和Firebase 9一起使用清单版本3?

    我用于登录的当前代码:

    import { GoogleAuthProvider, signInWithCredential, signInWithPopup } from 'firebase/auth';
    import triggerMessage from '../../components/common/SnackBar';
    import { auth } from '../../firebase/firebase-config';
    
    const getGoogleAuthCredential = () => {
      return new Promise<ReturnType<typeof GoogleAuthProvider.credential>>((resolve, reject) => {
        if (typeof chrome !== 'undefined' && chrome.identity) {
          chrome.identity.getAuthToken({ interactive: true }, (token: any) => {
            if (chrome.runtime.lastError) {
              console.error(chrome.runtime.lastError);
              reject(chrome.runtime.lastError);
            }
            console.log({ token });
            const credential = GoogleAuthProvider.credential("randomnumber-randomohash.apps.googleusercontent.com", token);
            console.log({ credential })
            resolve(credential);
          });
        } else {
          // Handle the case when the `chrome` object is not available
          reject(new Error('Chrome extension environment is required.'));
        }
      });
    };
    
    
    export const googleAuthHandler = async () => {
      try {
        let credential;
        // Check if running in Chrome extension environment
        if (window.location.origin.includes("chrome-extension")) {
          credential = await getGoogleAuthCredential();
        } else {
          // Use regular GoogleAuthProvider for non-extension environments
          const provider = new GoogleAuthProvider();
          console.log({ provider })
          await signInWithPopup(auth, provider);
          return;
        }
        console.log({ credential })
        const result = await signInWithCredential(auth, credential);
        return result.user;
    
        // const result = await signInWithPopup(auth, { providerId: credential.providerId });
        // return result.user;
      } catch (error) {
        console.error(error);
        triggerMessage("Error signing in with Google. Please try again.", "error")
        return null;
      }
    };
    
    

    Current error - "OAuth2 request failed: Service responded with error: 'bad client id: {0}'"

    我尝试过Identity并尝试过进行设置。最后,弹出窗口显示在扩展中,但当我点击一封电子邮件登录时,这些与Oauth相关的问题就出现了。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Alexey    2 年前

    如果你只是因为谷歌身份而使用Firebase,我建议你尝试将Aurinko作为你的后端API,因为它是为Chrome扩展等插件设计的,使用openid auth。看见 this article