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:
projects$ laravel new authdemo
Luego, navegaremos hasta el directorio principal del proyecto y lo inicializaremos para llevar el control y seguimiento con git.
projects/authdemo$ git init
En este punto, podemos ver todos los archivos que fueron copiados con el instalador, con el siguiente comando:
projects/authdemo$ git status
Vamos a agregarlos al Stage de git para hacer nuestro primer commit habitual.
projects/authdemo$ git add . projects/authdemo$ git commit -m "first commit"
Ahora, el estado del proyecto está completamente limpio y podemos verificarlo fácilmente con la siguiente instrucción:
projects/authdemo$ git status
Vamos a inspeccionar los cambios que involucra la ejecución del comando artisan make:auth.
projects/authdemo$ php artisan make:auth
Seguido de la inspección del estado de git nuevamente para ver los cambios más recientes del proyecto:
$projects/authdemo $ git status
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.
$projects/authdemo$ git diff routes/web.php
diff --git a/routes/web.php b/routes/web.php index 810aa34..12fc04c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -14,3 +14,7 @@ Route::get('/', function () { return view('welcome'); }); + +Auth::routes(); + +Route::get('/home', 'HomeController@index')->name('home');
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 facadeAuth
cuya 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:
public static function routes(array $options = []) { static::$app->make('router')->auth($options); }
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í:
public function auth(array $options = []) { // Authentication Routes... $this->get('login', 'Auth\LoginController@showLoginForm')->name('login'); $this->post('login', 'Auth\LoginController@login'); $this->post('logout', 'Auth\LoginController@logout')->name('logout'); // Registration Routes... if ($options['register'] ?? true) { $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); $this->post('register', 'Auth\RegisterController@register'); } // Password Reset Routes... if ($options['reset'] ?? true) { $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); $this->post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update'); } // Email Verification Routes... if ($options['verify'] ?? false) { $this->emailVerification(); } }
¿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.php
que hace el llamado inicial.
Auth::routes(['register' => false]);
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:
projects/styde-auth$ php artisan route:list
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:
Route::get('/', function () { return view('welcome'); }); // Authentication Routes... Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login', 'Auth\LoginController@login'); Route::post('logout', 'Auth\LoginController@logout')->name('logout'); // Registration Routes... Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); Route::post('register', 'Auth\RegisterController@register'); // Password Reset Routes... Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update'); // Email Verification Routes... Route::emailVerification(); Route::get('/home', 'HomeController@index')->name('home');
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'
.
@if (Route::has('register')) <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a> @endif
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:
// Registration Routes... Route::get('registro', 'Auth\RegisterController@showRegistrationForm')->name('register'); Route::post('registro', 'Auth\RegisterController@register');
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
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.