En el corto post de hoy veremos cómo validar que las contraseñas que el usuario escribe sean iguales al momento de registrar un usuario, es decir, que la contraseña y la confirmación de la contraseña coincidan.
Así vas a poder mostrar el mensaje de “Las contraseñas deben coincidir” o “Vuelve a escribir tu contraseña”
Esto se puede hacer con un if o cosas complejas, pero te enseñaré a comprobar si las 2 contraseñas son iguales dentro del Request
que llega al formulario, dentro de StoreUserRequest específicamente.
Por cierto, estoy suponiendo que usas la autenticación de Laravel para crear usuarios o que al menos usas un Request para enviar el formulario.
Validando confirmación de contraseña
Lo único que tenemos que hacer es modificar el StoreUserRequest
o el request que uses para registrar al usuario. En mi caso mis reglas se ven así:
<?php
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
"name" => "required",
"email" => "email:rfc",
"password" => "required",
"passwordConfirm" => "required|same:password",
"rol" => "required",
];
}
Presta atención a la línea 12, ahí estoy indicando que el campo password
es requerido, pero además en la línea 13 indico que el campo passwordConfirm
es requerido y debe ser igual al campo password
con same:password
.
Formulario para crear usuario
En este caso es necesario que el campo se llame igual que el de la validación. Por lo tanto mis campos son password
y passwordConfirm
:
<div class="field">
<label class="label">Contraseña</label>
<div class="control">
<input required class="input" type="password" placeholder="Escribe la contraseña" name="password">
</div>
</div>
<div class="field">
<label class="label">Confirmar contraseña</label>
<div class="control">
<input required class="input" type="password" placeholder="Vuelve a escribir la contraseña"
name="passwordConfirm">
</div>
</div>
Abajo del formulario estoy mostrando los errores en caso de que existan:
@if(session("mensaje"))
<div class="mt-2 notification is-{{session('tipo') ? session("tipo") : "info"}}">
{{session('mensaje')}}
</div>
@endif
@if (!empty($errors->all()))
<div class="notification is-danger mt-2">
<h4 class="is-size-4">Por favor, corrige lo siguiente:</h4>
<ul>
@foreach ($errors->all() as $mensaje)
<li>
{{ $mensaje }}
</li>
@endforeach
</ul>
</div>
@endif
Y en caso de que el usuario no escriba las mismas contraseñas y envíe el formulario, aparecerá lo siguiente:
La ventaja de usar Requests es que si la misma es inválida nunca llegará a nuestro controlador en donde guardamos el usuario.
Por aquí te dejo más tutoriales de Laravel.