Реализация проверки электронной почты с помощью проверочного кода в Laravel Lumen: примеры и код

Чтобы реализовать проверку электронной почты с помощью проверочного кода в Laravel Lumen, вы можете использовать различные методы. Вот несколько разных подходов:

Метод 1: использование встроенной функции проверки электронной почты Laravel
Laravel предоставляет встроенную функцию проверки электронной почты, которую вы также можете использовать в Laravel Lumen. Этот метод использует стандартную систему аутентификации Laravel.

Шаг 1. Настройте систему аутентификации Laravel
Для начала настройте систему аутентификации Laravel, выполнив следующие действия:

  1. Установить пакет пользовательского интерфейса Laravel:

    composer require laravel/ui
  2. Создайте структуру аутентификации:

    php artisan ui bootstrap --auth

Шаг 2. Настройте проверку электронной почты
Далее настройте проверку электронной почты в своем проекте:

  1. Добавьте черту MustVerifyEmailв свою модель пользователя:

    use Illuminate\Contracts\Auth\MustVerifyEmail;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    class User extends Authenticatable implements MustVerifyEmail
    {
    // ...
    }
  2. Настройте драйвер электронной почты и другие параметры в config/mail.php:

    'mailers' => [
    'smtp' => [
        'transport' => 'smtp',
        'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
        'port' => env('MAIL_PORT', 587),
        'encryption' => env('MAIL_ENCRYPTION', 'tls'),
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'timeout' => null,
        'auth_mode' => null,
    ],
    // ...
    ],
  3. Определите маршруты проверки электронной почты в routes/web.php:

    use Illuminate\Support\Facades\Route;
    Route::get('/email/verify', function () {
    return view('auth.verify-email');
    })->middleware(['auth', 'signed'])->name('verification.notice');
    Route::get('/email/verify/{id}/{hash}', function (Illuminate\Foundation\Auth\EmailVerificationRequest $request) {
    $request->fulfill();
    return redirect('/home');
    })->middleware(['auth', 'signed'])->name('verification.verify');
    Route::post('/email/verification-notification', function (Illuminate\Http\Request $request) {
    $request->user()->sendEmailVerificationNotification();
    return back()->with('message', 'Verification link sent!');
    })->middleware(['auth', 'throttle:6,1'])->name('verification.send');
  4. Создайте представления для проверки электронной почты в каталоге resources/views/auth:

    • verify-email.blade.php: представление, в котором отображается уведомление о проверке.
    • verify-email.blade.php: представление, в котором отображается сообщение об успешной проверке.

Метод 2: пользовательская логика проверки электронной почты
Если вы предпочитаете более индивидуальный подход, вы можете реализовать проверку электронной почты с помощью кода подтверждения, используя пользовательскую логику. Вот пример:

Шаг 1. Добавьте столбец кода подтверждения в таблицу «Пользователи».
Добавьте столбец verification_codeв таблицу usersдля хранения кода подтверждения.

Шаг 2. Создайте и отправьте код подтверждения
При регистрации пользователя сгенерируйте код подтверждения и отправьте его на его адрес электронной почты. Вот пример:

use Illuminate\Support\Facades\Mail;
function generateVerificationCode()
{
    return mt_rand(100000, 999999);
}
function sendVerificationEmail($user)
{
    $verificationCode = generateVerificationCode();
    $user->verification_code = $verificationCode;
    $user->save();
    Mail::send('emails.verify', ['user' => $user], function ($message) use ($user) {
        $message->to($user->email)->subject('Email Verification');
    });
}

Шаг 3. Проверка адреса электронной почты
Создайте маршрут и соответствующий метод контроллера для проверки электронной почты:

use Illuminate\Http\Request;
class VerificationController extends Controller
{
    public function verify(Request $request)
    {
        $user = User::where('email', $request->email)->where('verification_code', $request->verification_code)->first();
        if ($user) {
            $user->verification_code = null;
            $user->email_verified = true;
            $user->save();

            // Log in the user or perform any other necessary actions
            return redirect('/home')->with('message', 'Email verified successfully!');
        }
        return redirect('/login')->with('error', 'Invalid verification code.');
    }
}

Это всего лишь несколько примеров реализации проверки электронной почты с помощью проверочного кода в Laravel Lumen. Вы можете настроить эти методы в соответствии со своими конкретными требованиями.