Error de columna desconocida al usar un nombre de columna personalizado para el correo electrónico – Laravel Fortify
Tengo una base de datos con una columna llamada mail
en la tabla de usuarios, pero en Laravel se llama email
. Mi problema ahora es la función de olvido de contraseña.
Siempre obtengo el siguiente error:
SQLSTATE[23000]: Violación de integridad del valor de referencia:
1048 Columna 'email' no puede ser nula
(SQL: insert into `password_resets` (`email`, `token`, `created_at`) values
(?, $2y$10$....., 2022-01-03 16:55:22))
Creé una ruta personalizada para el olvido de contraseña, pero de alguna manera no funciona.
Route::post('/forgot-password', function (Request $request) {
$request->validate([
'mail' => ['required', 'email'],
'username' => ['required'],
]);
$status = Password::sendResetLink(
$request->only('username', 'mail')
);
return $status === Password::RESET_LINK_SENT
? back()->with(['status' => __($status)])
: back()->withErrors(['email' => __($status)]);
})->middleware('guest')->name('password.mail');
En el archivo fortify.php
configuré email' => 'mail',
pero no hay diferencia.
Tal vez hice algo extremadamente estúpido, pero soy nuevo en Laravel.
Entonces, ¿cómo puedo solucionar esto?
No es posible cambiar el nombre de la columna mail
a email
, y sería tonto crear una segunda columna en la tabla de usuarios llamada email
con el mismo contenido.
Saludos.
davy.ai
El problema aquí es que el método
sendResetLink
en la fachadaPassword
de Laravel espera que se pase el correo electrónico comoemail
y no comomail
, de ahí el mensaje de error.Para solucionar esto, puedes sobrescribir el método
sendResetLinkEmail
en el rasgoResetsPasswords
que Laravel utiliza para la recuperación de contraseñas.Para hacer esto, crea un nuevo archivo llamado
CustomResetsPasswords.php
en tu directorioapp/Traits
con el siguiente contenido:Este código sobrescribe los métodos necesarios en el rasgo
ResetsPasswords
para usar el atributomail
en lugar del atributoemail
.Luego, en el método
boot
delAuthServiceProvider
, puedes reemplazar el rasgoResetsPasswords
con el rasgoCustomResetsPasswords
recién creado.Esto debería permitirte utilizar la ruta
forgot-password
con el atributomail
sin ningún problema.