Hoy vamos a aprender cómo podemos implementar inicio de sesión con Google Sign y React, además compatible con Next.js.

Lo primero que tenemos que hacer es instalar la librería React Oauth2 Google
npm install @react-oauth/google@latest
Una vez instalado tenemos que crear nuestras credenciales para ello:
Vamos a Google Cloud Platform (https://cloud.google.com/) y pulsamos en Consola
Ahora seleccionamos nuestro proyecto (si ya lo tenemos creado por Firebase) o creamos uno nuevo.
Ahora buscamos: oauth clients

Elegimos External:

Rellenamos el nombre de la aplicación y los datos solicitados:

Después rellenamos Información de contacto del desarrollador:

Pulsamos en guardar y continuar.
En la siguiente pantalla no tocamos nada y volvemos a pulsar en guardar y continuar.
Lo mismo para la información opcional.
Ahora tenemos que añadir las claves permitidas, para ello vamos a Credenciales

Pulsamos en Crear Credenciales y Elegimos ID de cliente de OAuth y creamos una nueva de tipo web.
Copiamos el código que utilizaremos más adelante.
En origenes autorizados añadimos la dirección:
Para next.js/react:
http://localhost:3000

Para vite:
http://localhost:5137
También añadimos la de nuestra web:
http://devcodelight.com
En URI de redireccionamiento autorizados:

Ponemos:
http://localhost/callback
Ahora creamos un nuevo archivo en nuestro proyecto llamado GoogleSigninUtils.tsx
Y aquí dentro añadimos nuestro código:
export const GoogleSigninClientId = "XXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"
*Indicamos el nuestro.
Vamos a nuestro archivo principal index.tsx o _app.tsx (next.js) y envolvemos nuestra APP con el provider:
import React from 'react' import ReactDOM from 'react-dom/client' import App from './App.jsx' import { GoogleOAuthProvider } from "@react-oauth/google" import {GoogleSigninClientId } from "@GoogleSigninUtils" ReactDOM.createRoot(document.getElementById('root')).render( <GoogleOAuthProvider clientId={GoogleSigninClientId}> <App /> </GoogleOAuthProvider> )
Y ahora creamos un component llamado BotoGoogleSignin.tsx
import React from 'react'; import { GoogleLogin, CredentialResponse } from '@react-oauth/google'; interface Props { onSuccess: (response: CredentialResponse) => void; errorMessage: () => void; } const LoginGoogle: React.FC<Props> = ({ onSuccess, errorMessage }) => { return ( <div> <GoogleLogin onSuccess={onSuccess} onError={errorMessage} /> </div> ) }; export default LoginGoogle;
Y para invocarlo utilizamos:
<LoginGoogle onSuccess={(response) => { console.log('Google Login Success:', response); } } errorMessage={() => { console.log('Google Login Error:'); } } />
Y ahora, al ejecutarlo veremos que aparece esto:

Y al pulsar nos deja iniciar sesión.

Nos devolverá un token en formato JWT.
Para decodificarlo puede seguir este tutorial: https://devcodelight.com/?p=7898
Una vez obtenido, tendrá los datos del usuario que podremos validar con un servidor back.
Por ejemplo:
Python: https://devcodelight.com/verificar-token-de-google-auth-google-sign-usando-python/

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.