<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Dhivya M</title>
    <description>The latest articles on Forem by Dhivya M (@dhivya_m_3842c37dd1088a46).</description>
    <link>https://forem.com/dhivya_m_3842c37dd1088a46</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2028703%2Fb4a2c3cd-be0c-462c-9e27-53e81f5544ce.png</url>
      <title>Forem: Dhivya M</title>
      <link>https://forem.com/dhivya_m_3842c37dd1088a46</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/dhivya_m_3842c37dd1088a46"/>
    <language>en</language>
    <item>
      <title>Google Login OAuth Error:401 in React Frontend</title>
      <dc:creator>Dhivya M</dc:creator>
      <pubDate>Thu, 05 Sep 2024 03:06:25 +0000</pubDate>
      <link>https://forem.com/dhivya_m_3842c37dd1088a46/google-login-oauth-error401-in-react-frontend-5e10</link>
      <guid>https://forem.com/dhivya_m_3842c37dd1088a46/google-login-oauth-error401-in-react-frontend-5e10</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cflrqbnar8aef26t7lv3.png)Login.jsx
import{ useState } from "react";
import { GoogleOAuthProvider, GoogleLogin } from "@react-oauth/google";
import { FaFacebook, FaLinkedin } from "react-icons/fa";
import { Link, useNavigate } from "react-router-dom";
import { facebookLogin, linkedinLogin } from "../../utils/api";
import logo from "../../assets/logo.png"; // Ensure the correct path to your logo

const clientId = "xxxx"; // Replace with your actual Google client ID

const Login = () =&amp;gt; {
  const [error, setError] = useState("");
  const navigate = useNavigate();

  const handleGoogleSuccess = async (credentialResponse) =&amp;gt; {
    try {
      const token = credentialResponse.credential;

      // Fetch user profile info from Google
      //const userInfoResponse = await fetch(`https://www.googleapis.com/oauth2/v3/userinfo?access_token=${token}`, {
      const userInfoResponse = await fetch(`https://www.googleapis.com/oauth2/v3/userinfo?token=${token}`);
      if (!userInfoResponse.ok) {
        throw new Error(`Failed to fetch user info: ${userInfoResponse.statusText}`);
      }
      const userInfo = await userInfoResponse.json();
      console.log("User info:", userInfo);

      // Send user info to the backend
      const response = await fetch("http://localhost:3000/auth/gxxxxx", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          firstName: userInfo.given_name || "",
          lastName: userInfo.family_name || "",
          email: userInfo.email || "",
        }),
      });

      if (!response.ok) {
        throw new Error(`Backend responded with status: ${response.status}`);
      }

      const data = await response.json();
      console.log("Backend response:", data);

      if (data.token) {
        localStorage.setItem("token", data.token);
        navigate("/");
      } else {
        setError(data.message || "Google login failed");
      }
    } catch (err) {
      setError(err.message || "An error occurred during Google login");
    }
  };

  const handleGoogleFailure = () =&amp;gt; {
    setError("Google login failed. Please try again.");
  };

  return (
&amp;lt;GoogleOAuthProvider clientId={clientId}&amp;gt;
&amp;lt;div className="flex flex-col items-center justify-center min-h-screen bg-gray-100"&amp;gt;
&amp;lt;div className="w-full max-w-md p-8 bg-white rounded shadow"&amp;gt;
&amp;lt;img src={logo} alt="Logo" className="w-24 mx-auto mb-6" /&amp;gt;
&amp;lt;h2 className="mb-4 text-2xl text-center"&amp;gt;Login&amp;lt;/h2&amp;gt;
&amp;lt;div className="mb-4"&amp;gt;
&amp;lt;GoogleLogin
              onSuccess={handleGoogleSuccess}
              onError={handleGoogleFailure}
            /&amp;gt;
&amp;lt;/div&amp;gt;
          {error &amp;amp;&amp;amp; &amp;lt;p className="mb-4 text-sm text-red-500"&amp;gt;{error}&amp;lt;/p&amp;gt;}
&amp;lt;div className="mt-6"&amp;gt;
&amp;lt;button
              onClick={facebookLogin}
              className="flex items-center justify-center w-full p-2 mb-2 text-white bg-blue-700 rounded hover:bg-blue-800"
&amp;gt;
&amp;lt;FaFacebook className="mr-2" /&amp;gt; Sign in with Facebook
&amp;lt;/button&amp;gt;
&amp;lt;button
              onClick={linkedinLogin}
              className="flex items-center justify-center w-full p-2 text-white bg-blue-600 rounded hover:bg-blue-700"
&amp;gt;
&amp;lt;FaLinkedin className="mr-2" /&amp;gt; Sign in with LinkedIn
&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div className="mt-4 text-center"&amp;gt;
&amp;lt;a
              href="/forgot-password"
              className="text-blue-500 hover:underline"
&amp;gt;
              Forgot Password?
&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div className="mt-4 text-center"&amp;gt;
&amp;lt;span&amp;gt;Dont have an account? &amp;lt;/span&amp;gt;
&amp;lt;Link to="/register" className="text-blue-500 hover:underline"&amp;gt;
              Create one
&amp;lt;/Link&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/GoogleOAuthProvider&amp;gt;
  );
};

export default Login;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hello Team,&lt;br&gt;
Front End: React.js. Google OAuth Login&lt;br&gt;
Backend: Express API Endpoint&lt;br&gt;
Any Suggestion or feedback welcome. Thanks in advance.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>react</category>
      <category>api</category>
    </item>
  </channel>
</rss>
