javascript - 我如何告知 google oauth to firebase
问题描述
我需要你的帮助。我有一个应用程序。我可以使用普通(电子邮件和密码)登录并使用 Google Auth。
当我将我的信息打印到 console.log 时,它会成功打印,但我使用 firebase 并且我需要 firebase.auth().onStateChanged 来控制状态。
例如,如果我使用电子邮件和密码登录,则 onstateChanged 函数与 useEffect 一起使用,并重定向主页(因为此函数知道用户已登录),但是当我使用 google 登录时,我无法告知用户已登录或不是因为谷歌。
我如何同时使用谷歌登录和firebase?我怎么告诉firebase,我用谷歌登录,有我的信息不用担心。
我的代码:
谷歌代码:
const GoogleAuth = () => {
const saveFirebase = (email, uid) => {
return firebase.firestore().collection("users").doc(uid).set({
email: email,
});
};
const onSuccess = (response) => {
const name = response.profileObj.name;
const uid = response.profileObj.googleId;
console.log(uid);
console.log(name);
return saveFirebase(name, uid);
};
const handleClick = () => {
return (
<GoogleLogin
clientId="1093050194946-tcn6k22l190klav7cat182leq09luthu.apps.googleusercontent.com"
buttonText="Login"
onSuccess={onSuccess}
onFailure={onSuccess}
cookiePolicy={"single_host_origin"}
theme="dark"
/>
);
};
return <div className="google-button">{handleClick()}</div>;
};
我的常量变量:
const [user, setUser] = useState("");
带有 useEffect 的 onAuthStateChanged 代码:
const authListener = () => {
auth.onAuthStateChanged((user) => {
if (user) {
setUser(user);
setUsername(user.displayName);
} else {
}
});
};
useEffect(() => {
authListener();
});
解决方案
要检查用户是否使用电子邮件或 Google 登录,只需使用providerId
from user
you get from onAuthStateChanged
like here:
const authListener = () => {
auth.onAuthStateChanged((user) => {
if (user) {
setUser(user);
setUsername(user.displayName);
//Here you can se what provider the user used
console.log('provider',user.providerId)
} else {
}
});
};
推荐阅读
- visual-studio - 如何使用加密数据部署 SSIS 项目?
- java - println到txt文件的方法
- postgresql - 本地计算机上的 postgresql-x64-10 服务启动然后停止
- javascript - 如果我试图拆分最后一个单词,拆分句子不起作用
- reporting-services - SSRS 2012 Report Builder 3.0 同一图表上的条形图和点
- c# - RedirectToAction 返回 301
- python - 使用 Flask-SQLAlchamy 和 Python3 将数百万行插入到 SQLite3 表中
- ios - 为 Ios 上传 App 徽标 In react native
- java - 发送/接收 MPI-Fortran-Java
- javascript - 为多个集合缓存 Firebase 数据 - 我怎么知道什么时候发生了变化?