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
(enIlluminateFoundationAuthUser
clase extendida por el principalUser
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 costumbreVerifyEmail
clase - anular la implementación de
verificationUrl
- anular la implementación de la
sendEmailVerificationNotification
método en elUser
modelo para usar nuestro nuevoVerifyEmail
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.