Contents
En este artículo, vamos a Verificar Email API Laravel para que funcione a la perfección con el frontend. La idea es simple: cuando el usuario hace clic en el enlace de verificación que le enviamos por correo, queremos que sea redirigido a una página de éxito en la aplicación frontend, en lugar de llevarlo a la pantalla de inicio de sesión o a cualquier otro sitio que pueda generar confusión.
Este enfoque es ideal para proyectos donde no usamos las vistas de Laravel tradicionales (como Blade), sino que trabajamos únicamente con APIs que interactúan directamente con el frontend. Aquí te explicaré cómo hacer que tu API maneje la verificación del email de una manera fluida y sin vueltas, logrando una experiencia mucho más intuitiva para el usuario.
¿Necesitas un programador ? Contacta conmigo
Problema Común en Verificar Email API Laravel
Un problema frecuente es que, al hacer clic en el enlace de verificación, el usuario es redirigido a la página de inicio de sesión en lugar de ser marcado como verificado y redirigido al frontend. Este inconveniente se debe a que la ruta de verificación requiere autenticación. La solución consiste en manejar la verificación sin exigir que el usuario esté autenticado en el momento de hacer clic en el enlace.
Solución Propuesta
Para implementar la verificación de email sin necesidad de autenticación, seguiremos estos pasos:
- Configurar el modelo
Userpara que implementeMustVerifyEmail. - Crear el controlador de autenticación (
AuthController) para registrar usuarios y enviar la notificación de verificación. - Definir las rutas para la verificación y el reenvío del enlace de verificación en
api.php. - Crear el controlador
VerifyEmailControllerpara manejar la verificación sin autenticación.
Implementación Paso a Paso para Verificar Email API Laravel
1. Configurar el Modelo User
Para implementar Verificar Email API Laravel Asegúrate de que el modelo User implemente MustVerifyEmail y de tener configurado HasApiTokens para manejar los tokens de acceso.
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable implements MustVerifyEmail
{
use HasFactory, Notifiable, HasApiTokens;
protected $fillable = [
'name',
'email',
'password',
];
protected $hidden = [
'password',
'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
}

Verificar Email API Laravel
2. Crear el Controlador de Autenticación
En AuthController, configuramos la lógica de registro y login de usuario, generamos un token de acceso para cada usuario y enviamos la notificación de verificación.
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Registered;
class AuthController extends Controller
{
public function register(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|max:55',
'email' => 'email|required|unique:users',
'password' => 'required|confirmed'
]);
$validatedData['password'] = bcrypt($request->password);
$user = User::create($validatedData);
event(new Registered($user));
$accessToken = $user->createToken('authToken')->accessToken;
return response(['user' => $user, 'access_token' => $accessToken]);
}
public function login(Request $request)
{
$loginData = $request->validate([
'email' => 'email|required',
'password' => 'required'
]);
if (!auth()->attempt($loginData)) {
return response(['message' => 'Invalid Credentials']);
}
$accessToken = auth()->user()->createToken('authToken')->accessToken;
return response(['user' => auth()->user(), 'access_token' => $accessToken]);
}
}
3. Definir las Rutas de Verificación y Reenvío de Enlace
En el archivo api.php, definimos la ruta de verificación de email y el reenvío del enlace de verificación. La ruta de verificación no tiene el middleware auth, por lo que no requiere autenticación.
// Verify email
Route::get('/email/verify/{id}/{hash}', [VerifyEmailController::class, '__invoke'])
->middleware(['signed', 'throttle:6,1'])
->name('verification.verify');
// Resend link to verify email
Route::post('/email/verify/resend', function (Request $request) {
$request->user()->sendEmailVerificationNotification();
return back()->with('message', 'Verification link sent!');
})->middleware(['auth:api', 'throttle:6,1'])->name('verification.send');
4. Crear el Controlador de Verificación de Email
Finalmente, creamos VerifyEmailController para verificar el email del usuario sin autenticación. Este controlador busca al usuario por su id, y si no ha sido verificado, marca el email como verificado y redirige al frontend a una página de éxito o error.
namespace App\Http\Controllers;
use Illuminate\Auth\Events\Verified;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use App\Models\User;
class VerifyEmailController extends Controller
{
public function __invoke(Request $request): RedirectResponse
{
$user = User::find($request->route('id'));
if ($user->hasVerifiedEmail()) {
return redirect(env('FRONT_URL') . '/email/verify/already-success');
}
if ($user->markEmailAsVerified()) {
event(new Verified($user));
}
return redirect(env('FRONT_URL') . '/email/verify/success');
}
}
Explicación de la Solución
- La ruta de verificación de email no requiere autenticación, lo que permite a los usuarios verificar su email sin tener que iniciar sesión.
- El controlador
VerifyEmailControllerutiliza eliden la URL para buscar al usuario y, si no está verificado, marca el email como verificado y lanza el eventoVerified. - Redirigimos al frontend a una página de éxito o a una de mensaje si el usuario ya había verificado su email.
Conclusión
Esta implementación permite que el usuario verifique su email a través de un enlace enviado en su bandeja de entrada sin necesidad de autenticarse. La solución es ideal para aplicaciones frontend que consumen una API Laravel y requieren flujos de autenticación simplificados.
Contacto
Si necesitas servicios de desarrollo para tu empresa , estoy aquí para ayudarte. Ofrezco soluciones personalizadas y de alta calidad para satisfacer tus necesidades. Para más información o para discutir tu proyecto, contáctame a traves del siguiente botón

