Curso Autenticacion

En esta lección del curso de Métodos de Autenticación con Laravel aprenderás cómo desactivar o personalizar la URL de registro de tu aplicación.

Repositorio

Ver el código de esta lección en GitHub

Notas

Por Pastor Ramos

Determinando los cambios del comando artisan make:auth

Vamos a examinar los cambios producidos por el comando make:auth desde un nuevo proyecto creado con el instalador de Laravel. Para ello primero crearemos el proyecto authdemo con la siguiente instrucción:

Luego, navegaremos hasta el directorio principal del proyecto y lo inicializaremos para llevar el control y seguimiento con git.

En este punto, podemos ver todos los archivos que fueron copiados con el instalador, con el siguiente comando:

Vamos a agregarlos al Stage de git para hacer nuestro primer commit habitual.

Ahora, el estado del proyecto está completamente limpio y podemos verificarlo fácilmente con la siguiente instrucción:

Vamos a inspeccionar los cambios que involucra la ejecución del comando artisan make:auth.

Seguido de la inspección del estado de git nuevamente para ver los cambios más recientes del proyecto:

Podemos ver de forma separada los archivos modificados y los que fueron agregados al proyecto, pero concretamente observaremos los cambios al archivo de rutasroutes/web.php, con el comando git diff.

Las instrucciones precedidas por el símbolo +, señalan las modificaciones realizadas: Se agregó la llamada a la clase Auth::routes() y una nueva ruta para/home.

Examinando las clases

De regreso a nuestro proyecto styde-auth, si abrimos el archivo de rutas web.php veremos el llamado que fue agregado, es decir Auth::routes().  A su vez dentro del facadeAuthcuya ruta es ~/projects/styde-auth/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php también podemos visualizar el contenido del método routes(), esto es:

Aquí observaremos que este métodoroutes()delega al métodoauth()del objetorouter que es cargado con el contenedor de inyección de dependencias de Laravel.

Para visualizar el contenido de este objeto router, debemos  dirigirnos a la clase Router cuya ruta es: ~/projects/styde-auth/vendor/laravel/framework/src/Illuminate/Routing/Router.php.. Una vez aquí, podemos revisar la declaración del método auth() junto con todas las rutas que se definen allí:

¿Cómo desactivar el módulo de registro?

Este código contiene las rutas URL que permiten invocar los módulos de registro, autenticación y recuperación de contraseñas. Además, podemos observar que algunos módulos se pueden usar opcionalmente.

Por ejemplo: si quisiéramos ocultar el módulo de registro, podemos ver que tenemos acá una opción para desactivarlo. Simplemente debemos pasar un array asociativo con la llave ‘register’ igual a falso, directamente en el archivo routes/web.phpque hace el llamado inicial.

Si ejecutamos el proyecto desde el navegador, podemos verificar que la opción de registro ya no aparece. De igual forma, el sistema se protege también rechazando cualquier esfuerzo que hagamos para acceder directamente a la URL www.styde-auth/register desde el navegador.

Podemos verificar esto también utilizando el comando:

Nota que todas las rutas de la sección // Registration routes ... del método auth() han desaparecido.

Personalizando las URLs del módulo de registro en Laravel

Si nosotros quisiéramos personalizar aún más las rutas al módulo de registro, por ejemplo llamarla en español www.styde-auth/registro en lugar de www.styde-auth/register, podemos hacerlo en el código directamente. Pero no es una buena práctica hacerlo desde la clase Router del Framework puesto que perderíamos estos cambios cada vez que ejecutemos el comando composer update.

Modificando el archivo routes/web.php

La idea es copiar las líneas de código de éste método directamente en el archivo routes/web.php, reemplazando así completamente el llamado del facade Auth::routes()por la declaración manual de todas estas rutas.

Una vez que hayamos copiado las rutas, todavía debemos reemplazar el llamado a $this->, puesto que ya no estamos dentro de la clase Router, por el facade Route::.  Tampoco necesitamos los condicionales, así que también podemos eliminarlos para simplificar el código.

El archivo routes/web.php luciría de la siguiente forma:

Ahora, si quisiéramos desactivar el módulo de registros tal como hicimos anteriormente, solamente tenemos que eliminar las rutas asociadas al módulo de registro.

Funcionamiento de las rutas de autenticación en la vista

En realidad es muy sencillo, si exploramos la vista app.blade.php ubicada en ~/projects/styde-auth/resources/views/layouts/app.blade.php de nuestro proyecto, para observar el código donde intervienen las rutas, tal como se aprecia en el siguiente ejemplo de la ruta de registro 'register'.

Por ejemplo podemos ver que únicamente se muestra el enlace de registro, cuando la ruta está registrada. Acá se refiere al nombre name con que identificamos la ruta y no a la URL.

Así que podemos cambiar las URLs, en routes/web.php sin que se afecte la lógica del proyecto. Por ejemplo, si ahora queremos que la URL de registro sea www.styde-auth/registro podemos hacer el cambio directo en el código, como se muestra a continuación:

De vuelta al navegador, si recargamos la página principal y utilizamos la opción de registro podemos ver que la URL ha cambiado a www.styde-auth.local/registro.

Esto funciona de nuevo porque Laravel está utilizando rutas con nombre, así que no importa los cambios de las rutas siempre que en nuestro layout hagamos referencia al helper route y al nombre de la ruta.

Personalizando la vista /home

El comando artisan make:auth también incorpora una ruta/home a una página de inicio con su correspondiente vista en layouts/home.blade.php, la cual  puedes personalizar a tu conveniencia.

Material Relacionado

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Aprende desarrollo web con Laravel, Vue.js y mucho más a partir de 9 USD al mes: ver planes.

Lección anterior Traducción de los módulos de registro, autenticación y recuperación de contraseña en Laravel