首页 > 解决方案 > 我如何告知 google oauth to firebase

问题描述

我需要你的帮助。我有一个应用程序。我可以使用普通(电子邮件和密码)登录并使用 Google Auth。

当我将我的信息打印到 console.log 时,它会成功打印,但我使用 firebase 并且我需要 firebase.auth().onStateChanged 来控制状态。

例如,如果我使用电子邮件和密码登录,则 onstateChanged 函数与 useEffect 一起使用,并重定向主页(因为此函数知道用户已登录),但是当我使用 google 登录时,我无法告知用户已登录或不是因为谷歌。

我如何同时使用谷歌登录和firebase?我怎么告诉firebase,我用谷歌登录,有我的信息不用担心。

这里是谷歌日志(我的谷歌名称和 googleId): 在此处输入图像描述

我的代码:

谷歌代码:

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();
  });

标签: javascriptreactjsfirebasegoogle-cloud-firestoreoauth-2.0

解决方案


要检查用户是否使用电子邮件或 Google 登录,只需使用providerIdfrom useryou get from onAuthStateChangedlike 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 {
        
      }
    });
  };

推荐阅读