Nhiều web application yêu cầu người dùng xác minh địa chỉ email của họ trước khi sử dụng application. Thay vì bắt bạn phải thực hiện lại điều này trên mỗi application của bạn, Laravel cung cấp các phương thức thuận tiện để gửi và xác minh các email.
Để bắt đầu, hãy kiểm tra model App\User
của bạn đã implement contract Illuminate\Contracts\Auth\MustVerifyEmail
:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;
// ...
}
Tiếp theo, bảng user
của bạn phải chứa cột email_verified_at
để lưu ngày giờ mà địa chỉ email được xác minh. Mặc định, migration của bảng user
tồn tại trong framework Laravel đã chứa cột này. Vì vậy, tất cả những gì bạn cần làm là chạy migration cơ sở dữ liệu của bạn:
php artisan migrate
Laravel có chứa một class Auth\VerificationController
dành cho những logic cần thiết để gửi các link verify và cách verify email. Để đăng ký các route cần thiết cho controller này, hãy truyền một tùy chọn verify
cho phương thức Auth::routes
:
Auth::routes(['verify' => true]);
Route middleware có thể được sử dụng để chỉ cho phép những người dùng mà đã xác minh được truy cập vào một route nhất định. Laravel cung cấp một middleware verified
, được định nghĩa tại Illuminate\Auth\Middleware\EnsureEmailIsVerified
. Vì middleware này đã được đăng ký trong HTTP kernel của ứng dụng của bạn, nên tất cả những gì bạn cần là gắn middleware này vào một định nghĩa route:
Route::get('profile', function () {
// Only verified users may enter...
})->middleware('verified');
Laravel sẽ tự tạo ra tất cả các trang xác nhận email khi bạn chạy lệnh make:auth
. Các trang này được lưu trong resources/views/auth/verify.blade.php
. Bạn có thể thoải mái tùy biến các trang này nếu cần cho ứng dụng của bạn.
Sau khi địa chỉ email được xác nhận, người dùng sẽ được tự động chuyển hướng đến vị trí /home
. Bạn có thể tùy chỉnh vị trí chuyển hướng này bằng cách định nghĩa phương thức hoặc thuộc tính redirectTo
trên class VerificationController
:
protected $redirectTo = '/dashboard';
Laravel sẽ gửi các events trong quá trình xác nhận email. Bạn có thể gắn listener vào các event này trong EventServiceProvider
của bạn:
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'Illuminate\Auth\Event\Verified' => [
'App\Listeners\LogVerifiedUser',
],
];
entry