我一直在开发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相关的问题就出现了。