Giao diện
Xác minh Email (Email Verification)
Giới thiệu (Introduction)
Nhiều ứng dụng web yêu cầu users xác minh (verify) địa chỉ email trước khi sử dụng. Laravel cung cấp built-in services để gửi và xử lý email verification requests.
BẮT ĐẦU NHANH
Cài đặt Laravel Starter Kits — tự động scaffold authentication system bao gồm email verification.
Chuẩn bị Model (Model Preparation)
Model User phải implement interface MustVerifyEmail:
php
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;
// ...
}Interface này giúp Laravel tự động gửi verification email khi user đăng ký.
Chuẩn bị Database
Bảng users phải có cột email_verified_at (đã bao gồm sẵn trong migration mặc định):
php
$table->timestamp('email_verified_at')->nullable();Routing
Email Verification Notice
Route hiển thị thông báo cần verify email:
php
Route::get('/email/verify', function () {
return view('auth.verify-email');
})->middleware('auth')->name('verification.notice');LƯU Ý
Route phải tên là verification.notice. Middleware verified sẽ tự redirect đến route name này.
Email Verification Handler
Route xử lý khi user click link verify trong email:
php
use Illuminate\Foundation\Auth\EmailVerificationRequest;
Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
$request->fulfill();
return redirect('/home');
})->middleware(['auth', 'signed'])->name('verification.verify');EmailVerificationRequest tự động validate id và hash parameters.
Gửi lại Email Verification
php
use Illuminate\Http\Request;
Route::post('/email/verification-notification', function (Request $request) {
$request->user()->sendEmailVerificationNotification();
return back()->with('message', 'Link xác minh đã được gửi lại!');
})->middleware(['auth', 'throttle:6,1'])->name('verification.send');Bảo vệ Routes (Protecting Routes)
Dùng middleware verified:
php
Route::get('/profile', function () {
// Chỉ verified users...
})->middleware(['auth', 'verified']);User chưa verify sẽ bị redirect đến route verification.notice.
Tùy chỉnh (Customization)
Tùy chỉnh Verification Email
php
use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage;
VerifyEmail::toMailUsing(function (object $notifiable, string $url) {
return (new MailMessage)
->subject('Xác minh địa chỉ Email')
->line('Nhấn nút bên dưới để xác minh email.')
->action('Xác minh Email', $url);
});Đặt trong method boot của AppServiceProvider.
Events
Laravel dispatch event Illuminate\Auth\Events\Verified khi email được verify. Bạn có thể listen event này trong EventServiceProvider.