Laravel 5.7 срок действия подтверждения электронной почты - PullRequest
0 голосов
/ 05 декабря 2018

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

В config/auth есть:

'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

Но я не нашел ничего похожего для проверки электронной почты.В официальной документации нет также упоминания .

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

На самом деле вариантов нет в Laravel, но поскольку laravel использует следующее:

  • черта MustVerifyEmailIlluminate\Foundation\Auth\User классе, расширенном основным User модель)

  • Событие и уведомление

В признаке MustVerifyEmail есть метод, называемый sendEmailVerificationNotification.Здесь используется класс Notification VerifyEmail, на который ссылается @ nakov's answer и его функция verificationUrl:

/**
 * Send the email verification notification.
 *
 * @return void
 */
public function sendEmailVerificationNotification()
{
    $this->notify(new Notifications\VerifyEmail);
}

Поскольку мы знаем это, мы можем сделать следующее:

  • Расширение Notifications\VerifyEmail до нашего пользовательского VerifyEmail класса
  • переопределение реализации verificationUrl
  • переопределение реализации метода sendEmailVerificationNotification вUser модель для использования нашего нового VerifyEmail класса.

Сделав вышеизложенное, наша User модель будет иметь следующий метод:

/**
 * Send the email verification notification.
 *
 * @return void
 */
public function sendEmailVerificationNotification()
{
    $this->notify(new \App\Services\Verification\VerifyEmail);
}

Теперь мы делаемиспользование нашего класса VerifyEmail.Тогда наш новый класс VerifyEmail будет выглядеть так:

namespace App\Services\Verification;

use Illuminate\Support\Carbon;
use \Illuminate\Support\Facades\URL;

class VerifyEmail extends \Illuminate\Auth\Notifications\VerifyEmail
{
    protected function verificationUrl($notifiable)
    {
        return URL::temporarySignedRoute(
            'verification.verify', Carbon::now()->addMinute(3), ['id' => $notifiable->getKey()]
        );  //we use 3 minutes expiry
    }
}

Ну, кроме объяснений, процесс довольно прост.Я надеюсь, что это легко понять.Ура!

0 голосов
/ 08 июля 2019

Хотя вопрос конкретно касается Laravel 5.7, я чувствую, что стоит упомянуть, что в Laravel 5.8 этого можно достичь с помощью переменной config.Мой поиск по настройке времени истечения проверки вернул этот вопрос как лучший результат, отсюда и мое добавление.

Если мы извлечем Illuminate\Auth\Notifications\VerifyEmail, метод verificationUrl теперь выглядит так:

protected function verificationUrl($notifiable)
{
    return URL::temporarySignedRoute(
        'verification.verify',
        Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)),
        ['id' => $notifiable->getKey()]
    );
}

Таким образом, мы можем просто добавить этот блок в config/auth.php, чтобы настроить время без необходимости расширять классы или что-либо еще:

'verification' => [
    'expire' => 525600, // One year - enter as many mintues as you would like here
],
0 голосов
/ 05 декабря 2018

Если вы откроете Illuminate\Auth\Notifications\VerifyEmail::class;

В методе, который генерирует URL, уже используется срок действия, который по умолчанию равен 1 часу.К сожалению, нет возможности изменить это значение.

/**
 * Get the verification URL for the given notifiable.
 *
 * @param  mixed  $notifiable
 * @return string
 */
protected function verificationUrl($notifiable)
{
    return URL::temporarySignedRoute(
        'verification.verify', Carbon::now()->addMinutes(60), ['id' => $notifiable->getKey()]
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...