Documentación
Configuración OAuth
Configuración paso a paso de OAuth de Google y GitHub para Motoko Base — crea apps de proveedor, configura callback URLs y completa el .env.
El inicio de sesión con Google y GitHub es opcional. Deja las variables OAuth sin definir y la app arranca con normalidad — los botones sociales en /sign-in y /sign-up permanecen deshabilitados.
Una vez configurado, Better Auth gestiona el flujo OAuth y almacena las cuentas vinculadas en la tabla account. Las callback URLs deben coincidir exactamente con tu BETTER_AUTH_URL.
Antes de empezar
Asegúrate de que estas variables de auth ya estén definidas:
# .env or .env.local
DATABASE_URL=postgresql://...
BETTER_AUTH_SECRET=your-generated-secret
BETTER_AUTH_URL=http://localhost:3000
NEXT_PUBLIC_APP_URL=http://localhost:3000Para desarrollo local, usa http://localhost:3000 para ambas variables de URL. En producción, defínelas con tu origen HTTPS público (p. ej. https://app.example.com).
Genera BETTER_AUTH_SECRET si aún no lo has hecho:
openssl rand -base64 32Reinicia el servidor de desarrollo tras cambiar cualquier variable de entorno:
pnpm devGoogle OAuth
Paso 1 — Crear un proyecto en Google Cloud
- Abre Google Cloud Console
- Crea un proyecto nuevo (o selecciona uno existente)
- Ve a APIs & Services → OAuth consent screen
- Elige External (o Internal para apps solo de Workspace)
- Completa el nombre de la app, el email de soporte y el contacto del desarrollador
- Añade scopes:
email,profileyopenid(los defaults suelen bastar) - Añade usuarios de prueba si la app está en modo Testing
Paso 2 — Crear credenciales OAuth
- Ve a APIs & Services → Credentials
- Haz clic en Create Credentials → OAuth client ID
- Tipo de aplicación: Web application
- Nómbrala (p. ej.
Motoko Base local)
Paso 3 — Definir el redirect URI
En Authorized redirect URIs, añade:
{BETTER_AUTH_URL}/api/auth/callback/googleEjemplos:
| Environment | Redirect URI |
|---|---|
| Local | http://localhost:3000/api/auth/callback/google |
| Production | https://app.example.com/api/auth/callback/google |
La ruta debe ser exactamente /api/auth/callback/google — Better Auth registra esta ruta automáticamente.
Opcionalmente añade Authorized JavaScript origins para desarrollo local:
http://localhost:3000Paso 4 — Copiar credenciales a .env
Tras crear el cliente, Google muestra un Client ID y un Client secret. Añádelos a .env:
GOOGLE_CLIENT_ID=123456789-abcdef.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxAmbos valores son solo de servidor — nunca los pongas en NEXT_PUBLIC_*.
Paso 5 — Verificar en local
- Reinicia el servidor de desarrollo:
pnpm dev - Abre http://localhost:3000/sign-in
- El botón Sign in with Google debería estar habilitado (no en gris)
- Haz clic — deberías ir a Google y volver a
/dashboard
Si el botón sigue deshabilitado, comprueba que ambas GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET estén definidas y no vacías.
Solución de problemas de Google
| Problem | Fix |
|---|---|
redirect_uri_mismatch | Redirect URI in Google Console must match {BETTER_AUTH_URL}/api/auth/callback/google exactly (scheme, host, port, path) |
| Button disabled | Both GOOGLE_* vars must be set; restart dev server |
access_denied in Testing mode | Add your Google account as a test user on the consent screen |
| Works locally, fails in production | Add production redirect URI and set BETTER_AUTH_URL to your live domain |
GitHub OAuth
Paso 1 — Crear una GitHub OAuth App
- Abre GitHub Developer Settings → OAuth Apps
- Haz clic en New OAuth App
- Completa:
- Application name — p. ej.
Motoko Base - Homepage URL — la URL de tu app (local:
http://localhost:3000) - Authorization callback URL — ver Paso 2
- Application name — p. ej.
Paso 2 — Definir el callback URL
El Authorization callback URL debe ser:
{BETTER_AUTH_URL}/api/auth/callback/githubEjemplos:
| Environment | Callback URL |
|---|---|
| Local | http://localhost:3000/api/auth/callback/github |
| Production | https://app.example.com/api/auth/callback/github |
Haz clic en Register application.
Paso 3 — Generar un client secret
- En la página de la OAuth app, haz clic en Generate a new client secret
- Copia el Client ID y el Client secret de inmediato — el secret solo se muestra una vez
Paso 4 — Copiar credenciales a .env
GITHUB_CLIENT_ID=Iv1.xxxxxxxxxxxxxxxx
GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAmbos valores son solo de servidor.
Paso 5 — Verificar en local
- Reinicia el servidor de desarrollo:
pnpm dev - Abre http://localhost:3000/sign-in
- El botón Sign in with GitHub debería estar habilitado
- Haz clic — autoriza la app y aterriza en
/dashboard
GitHub Apps vs OAuth Apps
Motoko Base usa una OAuth App estándar (no una GitHub App). Si usas una GitHub App en su lugar, asegúrate de que Account permissions → Email addresses esté en Read-only para que Better Auth pueda leer el email verificado del usuario.
Solución de problemas de GitHub
| Problem | Fix |
|---|---|
redirect_uri mismatch | Callback URL must be {BETTER_AUTH_URL}/api/auth/callback/github exactly |
| Button disabled | Both GITHUB_* vars must be set; restart dev server |
| Missing email / sign-in fails | For GitHub Apps, enable Email addresses read permission; OAuth Apps include email by default |
| Works locally, fails in production | Update callback URL in GitHub settings and set production BETTER_AUTH_URL |
Checklist de producción
Usa esta checklist al desplegar OAuth en staging o producción:
-
Definir URLs canónicas
BETTER_AUTH_URL=https://app.example.com NEXT_PUBLIC_APP_URL=https://app.example.com -
Añadir callback URLs de producción en Google Console y en la configuración de la GitHub OAuth app (mantén las URI locales si sigues desarrollando en local)
-
Opcional — orígenes extra para deploys de preview:
BETTER_AUTH_TRUSTED_ORIGINS=https://staging.example.com,https://*.vercel.app -
Reiniciar / redesplegar tras cambios de env
-
Probar ambos proveedores en la URL en vivo — iniciar sesión, cerrar sesión y confirmar que la sesión persiste
Dónde está cableado OAuth en el código
Normalmente solo necesitas variables de entorno. Para personalizar el comportamiento, edita estos archivos:
| File | Purpose |
|---|---|
src/lib/auth/auth.ts | Registers socialProviders.google and socialProviders.github |
src/lib/auth/social.ts | isGoogleAuthConfigured() / isGitHubAuthConfigured() |
src/app/sign-in/sign-in-form.tsx | Google/GitHub sign-in handlers |
src/app/sign-up/sign-up-form.tsx | Google/GitHub sign-up handlers |
src/app/sign-in/page.tsx | Passes enabled flags to the form |
Los secretos OAuth nunca pertenecen a archivos TypeScript de config — solo a .env.
Siguientes pasos
Better Auth — Visión general completa de auth, sesiones, rutas protegidas y mapa de archivos.
Variables de entorno — Todas las variables de auth en un solo lugar.