Laravel Проверка электронной почты Отключить и включить одним касанием - PullRequest
0 голосов
/ 16 марта 2020

есть ли в любом случае, мы можем динамически устанавливать включение / отключение проверки электронной почты при регистрации пользователей?

Я думаю, чтобы установить проверку электронной почты, мы должны установить Auth::routes(['verify' => true]);, а в модели пользователя мы должны установить class User extends Authenticatable implements MustVerifyEmail

Есть ли простой способ сделать это динамически? Допустим, мы установили включение / отключение в панели администратора. И в соответствии с этим, мы можем установить включение / отключение на передней странице авторизации?

1 Ответ

2 голосов
/ 17 марта 2020

Вы можете просто манипулировать столбцом email_verified_at в таблице users.

Я предлагаю использовать наблюдателя:

php artisan make:observer UserObserver --model=User

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

UserObserver

class UserObserver
{
    /**
     * Handle the user "created" event.
     *
     * @param  \App\User  $user
     * @return void
     */
    public function created(User $user)
    {
        // Let's say you use config

        if (config('app.email_verification') == false) {
            $user->email_verified_at = now();
            $user->save();
        }
    }

    //

}

Чтобы определить доставку электронной почты, вы можете переопределить sendEmailVerificationNotification в модели пользователя:

/**
 * Send the email verification notification.
 *
 * @return void
 */
public function sendEmailVerificationNotification()
{
    if (config('app.email_verification')) {
        $this->notify(new VerifyEmail);
    }
}

Обновление

Сохранить email_verified_at как null, вы можете удалить наблюдателя, а затем обновить Auth::routes:

web. php

Auth::routes([
    'verify' => config('app.email_verification')
]);


Route::group([
    'middleware' => [config('app.email_verification') ? 'verified' : null]
], function () {

    // protected routes

    Route::get('dashboard', 'DashboardController@index');

});
...