Чтобы реализовать проверку электронной почты в Laravel, вы можете использовать несколько методов. Вот несколько подходов с примерами кода:
Метод 1: использование встроенной функции проверки электронной почты Laravel
Laravel предоставляет встроенную функцию проверки электронной почты, которая упрощает этот процесс. Чтобы использовать эту функцию, выполните следующие действия:
Шаг 1. Настройте базу данных
Убедитесь, что в таблице пользователей есть столбец email_verified_at. Этот столбец будет использоваться для хранения отметки времени подтверждения электронной почты.
Шаг 2. Включите проверку электронной почты.
Откройте модель пользователя и добавьте контракт Illuminate\Contracts\Auth\MustVerifyEmail в определение класса:
use Illuminate\Contracts\Auth\MustVerifyEmail;
class User extends Authenticatable implements MustVerifyEmail
{
// ...
}
Шаг 3. Создайте маршруты
Laravel включает предопределенные маршруты для проверки электронной почты. Чтобы сгенерировать эти маршруты, добавьте Auth::routes([’verify’ =>true]); строка в файле маршруты/web.php:
use Illuminate\Support\Facades\Auth;
Auth::routes(['verify' => true]);
Шаг 4. Защитите маршруты
Чтобы защитить определенные маршруты и обеспечить доступ к ним только проверенным пользователям, вы можете использовать проверенное промежуточное программное обеспечение. Например:
Route::get('/dashboard', 'DashboardController@index')->middleware('verified');
Шаг 5. Отправка писем с подтверждением
Когда пользователь регистрируется, вы можете отправить письмо с подтверждением с помощью метода sendEmailVerificationNotification(). Например:
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
{
use RegistersUsers;
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
$user->sendEmailVerificationNotification();
return $user;
}
}
Метод 2. Проверка электронной почты вручную
Если вы предпочитаете более индивидуальный подход, вы можете реализовать проверку электронной почты вручную. Вот пример:
Шаг 1. Создайте токен проверки
При регистрации пользователя сгенерируйте токен проверки и сохраните его в таблице пользователей. Вы можете использовать метод Str::random() для генерации случайного токена. Например:
use Illuminate\Support\Str;
$token = Str::random(40);
User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
'verification_token' => $token,
]);
Шаг 2. Отправьте электронное письмо с подтверждением.
Отправьте пользователю электронное письмо, содержащее ссылку для подтверждения. Ссылка должна включать сгенерированный токен. Вы можете использовать встроенный класс Mail Laravel для отправки электронных писем. Например:
use Illuminate\Support\Facades\Mail;
use App\Mail\VerificationEmail;
Mail::to($user->email)->send(new VerificationEmail($user));
Шаг 3. Подтвердите адрес электронной почты
Когда пользователь нажимает ссылку подтверждения, обработайте запрос и обновите столбец email_verified_at пользователя. Например:
public function verifyEmail(Request $request)
{
$user = User::where('verification_token', $request->token)->first();
if ($user) {
$user->email_verified_at = now();
$user->verification_token = null;
$user->save();
// Redirect or show a success message
} else {
// Handle invalid token
}
}