Diferencia entre revisiones de «Usuario:ManuelRomero/Laravel/autentificacion/Email»
De WikiEducator
(6 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 9: | Línea 9: | ||
laravel new auth-mail | laravel new auth-mail | ||
</source> | </source> | ||
− | ===Modelo | + | ===Modelo=== |
− | *Especificamos que el model autentificable implemente la interfaz '''''Illuminate\Contracts\Auth\MustVerifyEmail contract''''': | + | *Especificamos que el '''model''' autentificable ( '''user''' por defecto)implemente la interfaz '''''Illuminate\Contracts\Auth\MustVerifyEmail contract''''': |
<source lang=php> | <source lang=php> | ||
+ | //.... | ||
+ | use Illuminate\Contracts\Auth\MustVerifyEmail; | ||
+ | |||
+ | class User extends Authenticatable implements MustVerifyEmail | ||
+ | //...... | ||
+ | </source> | ||
+ | ===Data base=== | ||
+ | ;Ejecutamos las migraciones por defecto, | ||
+ | *Primero preparamos previamente el entorno en el ficheor .env (Databaname, Server ....) | ||
+ | <source lang=php> | ||
+ | |||
+ | DB_CONNECTION=mysql | ||
+ | DB_HOST=127.0.0.1 | ||
+ | DB_PORT=3306 | ||
+ | DB_DATABASE=auth_mail | ||
+ | DB_USERNAME=root | ||
+ | DB_PASSWORD=xxxxxxx | ||
+ | </source> | ||
+ | *Ejecutamos migraciones por defecto | ||
+ | <source lang=php> | ||
+ | php artisan migrate | ||
+ | </source> | ||
+ | ===Routing=== | ||
+ | *Necesitamos especificar tres rutas: | ||
+ | |||
+ | ;1.-Enlace de verficación de correo | ||
+ | *En estar ruta se le muestra al usuario que debe e hacer un click en el enlace de verificación de correo que le aparecerá, entregándelo una vista | ||
+ | <source lang=php> | ||
+ | Route::get('/email/verify', function () { | ||
+ | return view('auth.verify-email'); | ||
+ | })->middleware('auth')->name('verification.notice'); | ||
+ | </source> | ||
+ | |||
+ | ;2.-Manejador de solicitudes generadas | ||
+ | *Una ruta que nos valida con el id y el hash y nos envía a la ruta que deseemosanterior). | ||
+ | *Aquí se manejar la solicitud de verificación de correo cuando el usuario hace un click en la verificación de emial | ||
+ | <source lang=php> | ||
+ | use Illuminate\Foundation\Auth\EmailVerificationRequest; | ||
+ | |||
+ | Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) { | ||
+ | $request->fulfill(); | ||
+ | |||
+ | return redirect('/home'); | ||
+ | })->middleware(['auth', 'signed'])->name('verification.verify'); | ||
+ | |||
+ | </source> | ||
+ | ;3.- Ruta de reenvío por si el usuario pierde el primer enlace | ||
+ | *En esta ruta se entregará una vista para que el usuario pueda actuar si pierde el enlacer de verificación | ||
+ | <source lang=php> | ||
+ | use Illuminate\Http\Request; | ||
+ | |||
+ | Route::post('/email/verification-notification', function (Request $request) { | ||
+ | $request->user()->sendEmailVerificationNotification(); | ||
+ | |||
+ | return back()->with('message', 'Verification link sent!'); | ||
+ | })->middleware(['auth', 'throttle:6,1'])->name('verification.send'); | ||
+ | </source> | ||
+ | ===Configuración del servidor de correo=== | ||
+ | *Para que todo el sistema funcione, debemos tener configuerado en el web server un mail server. | ||
+ | *La configuración ha de estar establecida en el fichero de configueración '''.ENV''' | ||
+ | *Usando hestia, debemos mostrar los datos y copiarlos | ||
+ | |||
+ | <source lang=php> | ||
+ | AIL_MAILER=smtp | ||
+ | MAIL_HOST=localhost | ||
+ | MAIL_PORT=587 | ||
+ | MAIL_USERNAME=null | ||
+ | MAIL_PASSWORD=null | ||
+ | MAIL_ENCRYPTION=null | ||
+ | MAIL_FROM_ADDRESS="alumno1@manuel.infenlaces.com" | ||
+ | MAIL_FROM_NAME="${APP_NAME}" | ||
+ | </source> | ||
+ | |||
+ | ===PROBLEMAS=== | ||
+ | *El primer problema que me aparece es que supero el número de inodos en el sistema, lo soluciono aquí | ||
+ | https://stackoverflow.com/questions/65300153/error-enospc-system-limit-for-number-of-file-watchers-reached-angular | ||
+ | *El segundo problema, parece que tiene que ver con que no tengo un certificado en mi servidor | ||
+ | *Por ahora lo que he hecho es modificar el fichero de mail.php ubicado en config y he añadido en el elemento mailers/smtp, pero sigue sin funcionar .... | ||
+ | <source lang=php> | ||
+ | 'mailers' => [ | ||
+ | 'smtp' => [ | ||
+ | //.... | ||
+ | // add por mí para problema .... | ||
+ | 'auth_mode' => null, | ||
+ | 'stream' => [ | ||
+ | 'ssl' => [ | ||
+ | 'allow_self_signed' => true, | ||
+ | 'verify_peer' => false, | ||
+ | 'verify_peer_name' => false, | ||
+ | ], | ||
+ | ], | ||
+ | |||
+ | |||
+ | |||
+ | //... | ||
+ | </source> | ||
+ | ;Problema actual 5/8/22 | ||
+ | Expected response code "250" but got code "550", with message "550 127.0.0.1 is _my_ address". | ||
+ | ;otro | ||
+ | fgets(): SSL: Connection reset by peer | ||
+ | |||
+ | |||
</source> | </source> | ||
− | |||
− | |||
− |
Última revisión de 08:14 6 ago 2022
|
Contenido
Introducción
- Instalación de un proyecto nuevo
laravel new auth-mail
Modelo
- Especificamos que el model autentificable ( user por defecto)implemente la interfaz Illuminate\Contracts\Auth\MustVerifyEmail contract:
//.... use Illuminate\Contracts\Auth\MustVerifyEmail; class User extends Authenticatable implements MustVerifyEmail //......
Data base
- Ejecutamos las migraciones por defecto,
- Primero preparamos previamente el entorno en el ficheor .env (Databaname, Server ....)
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=auth_mail DB_USERNAME=root DB_PASSWORD=xxxxxxx
- Ejecutamos migraciones por defecto
php artisan migrate
Routing
- Necesitamos especificar tres rutas:
- 1.-Enlace de verficación de correo
- En estar ruta se le muestra al usuario que debe e hacer un click en el enlace de verificación de correo que le aparecerá, entregándelo una vista
Route::get('/email/verify', function () { return view('auth.verify-email'); })->middleware('auth')->name('verification.notice');
- 2.-Manejador de solicitudes generadas
- Una ruta que nos valida con el id y el hash y nos envía a la ruta que deseemosanterior).
- Aquí se manejar la solicitud de verificación de correo cuando el usuario hace un click en la verificación de emial
use Illuminate\Foundation\Auth\EmailVerificationRequest; Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) { $request->fulfill(); return redirect('/home'); })->middleware(['auth', 'signed'])->name('verification.verify');
- 3.- Ruta de reenvío por si el usuario pierde el primer enlace
- En esta ruta se entregará una vista para que el usuario pueda actuar si pierde el enlacer de verificación
use Illuminate\Http\Request; Route::post('/email/verification-notification', function (Request $request) { $request->user()->sendEmailVerificationNotification(); return back()->with('message', 'Verification link sent!'); })->middleware(['auth', 'throttle:6,1'])->name('verification.send');
Configuración del servidor de correo
- Para que todo el sistema funcione, debemos tener configuerado en el web server un mail server.
- La configuración ha de estar establecida en el fichero de configueración .ENV
- Usando hestia, debemos mostrar los datos y copiarlos
AIL_MAILER=smtp MAIL_HOST=localhost MAIL_PORT=587 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="alumno1@manuel.infenlaces.com" MAIL_FROM_NAME="${APP_NAME}"
PROBLEMAS
- El primer problema que me aparece es que supero el número de inodos en el sistema, lo soluciono aquí
https://stackoverflow.com/questions/65300153/error-enospc-system-limit-for-number-of-file-watchers-reached-angular
- El segundo problema, parece que tiene que ver con que no tengo un certificado en mi servidor
- Por ahora lo que he hecho es modificar el fichero de mail.php ubicado en config y he añadido en el elemento mailers/smtp, pero sigue sin funcionar ....
'mailers' => [ 'smtp' => [ //.... // add por mí para problema .... 'auth_mode' => null, 'stream' => [ 'ssl' => [ 'allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false, ], ], //...
- Problema actual 5/8/22
Expected response code "250" but got code "550", with message "550 127.0.0.1 is _my_ address".
- otro
fgets(): SSL: Connection reset by peer
</source>