Una aplicación Laravel robusta que implementa autenticación Google OAuth2 para enviar correos electrónicos a través de la Gmail API usando PHPMailer, con almacenamiento seguro de tokens y manejo automático de renovación.
- 🔐 Autenticación OAuth2 de Google - Autenticación segura con cuentas de Google
- 🗄️ Almacenamiento Seguro - Tokens almacenados en base de datos con cifrado
- 🔄 Renovación Automática - Manejo automático de tokens expirados
- 🏗️ Patrón Service - Arquitectura modular y mantenible
- 📝 Logging Completo - Sistema de logs robusto para debugging
- 🎯 PSR-12 Compliant - Código limpio siguiendo estándares PHP
- ⚡ Manejo de Errores - Mensajes de error amigables para el usuario
| Componente | Versión Mínima |
|---|---|
| PHP | 8.2+ |
| Laravel | 10.x |
| Composer | 2.x |
| MySQL/PostgreSQL | 5.7+ / 13+ |
git clone https://github.com/JavierVaronBueno/web-google-oauth.git
cd web-google-oauthcomposer install
npm install && npm run buildcp .env.example .env
php artisan key:generateEdita el archivo .env con tus credenciales:
# Base de datos
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_oauth_mailer
DB_USERNAME=tu_usuario
DB_PASSWORD=tu_contraseña
# Google OAuth2
GOOGLE_CLIENT_ID=tu-google-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=tu-google-client-secret
GOOGLE_REDIRECT_URI=http://localhost:8000/google/callback
# Configuración de correo
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=[email protected]
MAIL_PASSWORD=tu-app-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=[email protected]
MAIL_FROM_NAME="Laravel OAuth Mailer"php artisan migrate- Ve a Google Cloud Console
- Crea un nuevo proyecto o selecciona uno existente
- Habilita la Gmail API en "APIs y Servicios" → "Biblioteca"
- Ve a "APIs y Servicios" → "Credenciales"
- Crea credenciales → "ID de cliente de OAuth 2.0"
- Tipo de aplicación: Aplicación web
- URI de redirección autorizados:
http://localhost:8000/google/callback
Alcances requeridos:
- https://www.googleapis.com/auth/userinfo.email
- https://www.googleapis.com/auth/userinfo.profile
- https://mail.google.com/
php artisan serve- Visita
http://localhost:8000 - Inicia sesión con tu cuenta Laravel
- Haz clic en "Autenticar con Google"
- Autoriza los permisos solicitados
- ¡Envía emails desde la interfaz!
app/
├── Http/Controllers/
│ └── GoogleAuthController.php # Controlador principal OAuth2
├── Services/
│ └── GoogleAuthService.php # Lógica de negocio OAuth2
├── Models/
│ └── GoogleToken.php # Modelo Eloquent para tokens
└── Mail/
└── TestEmail.php # Clase de correo de prueba
resources/views/
├── welcome.blade.php # Vista principal
└── emails/
└── test.blade.php # Plantilla de email
routes/
└── web.php # Definición de rutas
CREATE TABLE google_tokens (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT UNSIGNED NOT NULL,
access_token TEXT NOT NULL,
refresh_token TEXT,
expires_at TIMESTAMP NULL,
token_type VARCHAR(50) DEFAULT 'Bearer',
scope TEXT,
created_at TIMESTAMP NULL,
updated_at TIMESTAMP NULL,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_user_id (user_id),
INDEX idx_expires_at (expires_at)
);# Limpiar caché de aplicación
php artisan cache:clear
php artisan config:clear
php artisan route:clear
# Ver logs en tiempo real
tail -f storage/logs/laravel.log
# Ejecutar tests
php artisan test
# Generar documentación de API
php artisan route:list# Limpiar sesiones
php artisan session:table
php artisan migrate- Verifica que el scope
https://mail.google.com/esté configurado - Confirma que el usuario tenga permisos de Gmail habilitados
- Asegúrate de que
GOOGLE_REDIRECT_URIcoincida exactamente con Google Console - Incluye el protocolo (
http://ohttps://)
# Habilitar debug en .env
MAIL_DEBUG=true
LOG_LEVEL=debug- ✅ Usa HTTPS en producción
- ✅ Tokens almacenados de forma segura en BD
- ✅ Validación de estado CSRF
- ✅ Sanitización de inputs
- ✅ Rate limiting en rutas sensibles
APP_ENV=production
APP_DEBUG=false
GOOGLE_REDIRECT_URI=https://tudominio.com/google/callback{
"league/oauth2-client": "^2.7",
"phpmailer/phpmailer": "^6.8",
"laravel/framework": "^10.0"
}composer require league/oauth2-client phpmailer/phpmailerphp artisan config:cache
php artisan route:cache
php artisan view:cache
composer install --optimize-autoloader --no-dev# Configurar supervisor para colas
php artisan queue:work --daemonQUEUE_CONNECTION=database
CACHE_DRIVER=redis
SESSION_DRIVER=redis- Fork el repositorio
- Crea una rama feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Añadir nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Crea un Pull Request
- Sigue PSR-12 para el código PHP
- Incluye tests para nuevas funcionalidades
- Actualiza la documentación según sea necesario
- Asegúrate de que todos los tests pasen
Este proyecto está licenciado bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
- Laravel - Framework PHP
- League OAuth2 Client - Cliente OAuth2
- PHPMailer - Librería de email PHP
- Google Gmail API - API de Gmail
¿Necesitas ayuda?
- 📧 Email: [email protected]
- 🐛 Issues: GitHub Issues
- 💬 Discusiones: GitHub Discussions
⭐ Si este proyecto te fue útil, no olvides darle una estrella en GitHub ⭐
Made with ❤️ by Javier Varon