Saltar al contenido

Tiempo de caducidad de verificación de correo electrónico de Laravel 5.7

Entiende el código bien previamente a adaptarlo a tu proyecto si tquieres aportar algo puedes dejarlo en la sección de comentarios.

Solución:

Si bien la pregunta aborda específicamente Laravel 5.7, creo que vale la pena mencionar que a partir de Laravel 5.8, es posible lograr esto con una variable de configuración. Mi búsqueda para personalizar el tiempo de vencimiento de la verificación arrojó esta pregunta como el resultado principal, de ahí mi adición.

si echamos un vistazo IlluminateAuthNotificationsVerifyEmail, el verificationUrl El método ahora se ve así:

protected function verificationUrl($notifiable)

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

Como tal, podemos simplemente agregar este bloque a config/auth.php para personalizar la hora sin necesidad de extender las clases ni nada:

'verification' => [
    'expire' => 525600, // One year - enter as many mintues as you would like here
],

ACTUALIZAR: He escrito sobre el enfoque anterior, así como otro sobre la personalización del proceso anulando el verificationUrl método para darle más flexibilidad, en mi blog.

De hecho, las opciones no están ahí en Laravel, pero dado que laravel hace uso de lo siguiente:

  • un rasgo MustVerifyEmail (en IlluminateFoundationAuthUser clase extendida por el principal User modelo)

  • Evento y notificación

En el MustVerifyEmail rasgo, hay un método llamado sendEmailVerificationNotification. Aquí es donde la Notificación VerifyEmail clase a la que hace referencia la respuesta de @ nakov y su función verificationUrl se utiliza:

/**
 * Send the email verification notification.
 *
 * @return void
 */
public function sendEmailVerificationNotification()

    $this->notify(new NotificationsVerifyEmail);

Como sabemos esto, podemos hacer lo siguiente:

  • Extender el NotificationsVerifyEmail a nuestra costumbre VerifyEmail clase
  • anular la implementación de verificationUrl
  • anular la implementación de la sendEmailVerificationNotification método en el User modelo para usar nuestro nuevo VerifyEmail clase.

Habiendo hecho lo anterior, nuestro User modelo tendrá el siguiente método:

/**
 * Send the email verification notification.
 *
 * @return void
 */
public function sendEmailVerificationNotification()

    $this->notify(new AppServicesVerificationVerifyEmail);

Ahora hacemos uso de nuestra costumbre VerifyEmail clase. Entonces nuestro nuevo VerifyEmail la clase se vería así:

namespace AppServicesVerification;

use IlluminateSupportCarbon;
use IlluminateSupportFacadesURL;

class VerifyEmail extends IlluminateAuthNotificationsVerifyEmail

    protected function verificationUrl($notifiable)
    
        return URL::temporarySignedRoute(
            'verification.verify', Carbon::now()->addMinute(3), ['id' => $notifiable->getKey()]
        );  //we use 3 minutes expiry
    

Bueno, aparte de las explicaciones, el proceso es bastante sencillo. Espero que sea fácil de entender. ¡Salud!

Si abres el IlluminateAuthNotificationsVerifyEmail::class;

El método que genera la URL ya utiliza el tiempo de caducidad, que por defecto es de 1 hora. Desafortunadamente no hay opción para modificar ese valor.

/**
 * 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()]
    );

Si para ti ha resultado de provecho nuestro post, sería de mucha ayuda si lo compartieras con más seniors de esta forma contrubuyes a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *