Diferencia entre revisiones de «Usuario:ManuelRomero/Laravel/autentificacion/introduccion»

De WikiEducator
Saltar a: navegación, buscar
(Conceptos generales)
 
(30 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 
{{:Usuario:ManuelRomero/micursos/Laravel/autentificacion/nav}}
 
{{:Usuario:ManuelRomero/micursos/Laravel/autentificacion/nav}}
 
{{__TOC__}}
 
{{__TOC__}}
 
+
https://www.youtube.com/watch?v=BXXmboZRLYo
===Conceptos generales===
+
<div class=parrafo>
*La autentificación es otra de las muchas tareas comunes en cualquier aplicación que en el fondo no es parte de la aplicación sino un nivel de seguridad o compromiso que nuestra app pretende adoptar.
+
<!--
*Laravel gestiona la autentificación en varios ficheros según vamos a ver a continuación.
+
{{MRM_actividad|Title=Para recordoar|
*Laravel nos ofrece la autentificación como un servicio.
+
;Instalacion
*Laravel tiene preconfigurada la autentificación la cual la podemos activar de manera sencilla.
+
composer require "laravel/breeze"
====Autentificación implementada en Laravel====
+
php artisan breeze:install
;Fichero de configuración
+
(tener instalado nodejs y npm)
config/auth.php
+
npm install
 
+
npm run dev
*Un listado de este fichero por defecto en la versión 5.2.32 (ver fichero en un proyecto para comentarios)
+
*Las migraciones
{{Plegable|hide|config.php|
+
  Establecer los datos de conexión en el fichero .env
<source lang=php>
+
  ejecutar las migracionesw
?php
+
return array(
+
 
+
return [
+
//Autentificaciones por defecto
+
 
+
    'defaults' => [
+
        'guard' => 'web',
+
        'passwords' => 'users',
+
    ],
+
 
+
//Configuración de guards *cómo los usuario se autentifican en cada solicitud*
+
    'guards' => [
+
        'web' => [
+
            'driver' => 'session',
+
            'provider' => 'users',
+
        ],
+
 
+
        'api' => [
+
            'driver' => 'token',
+
            'provider' => 'users',
+
        ],
+
    ],
+
7
+
//Configuración de providers
+
*como los usuario recuperar su almacenamiento permanente e.d donde está
+
almacenadas las credenciales para verificar la autentificación*/
+
    'providers' => [
+
        'users' => [
+
            'driver' => 'eloquent',
+
            'model' => App\User::class,
+
        ],
+
 
+
        // 'users' => [
+
        //    'driver' => 'database',
+
        //    'table' => 'users',
+
        // ],
+
    ],
+
//configuración para resetear la password
+
 
+
    'passwords' => [
+
        'users' => [
+
            'provider' => 'users',
+
            'email' => 'auth.emails.password',
+
            'table' => 'password_resets',
+
            'expire' => 60,
+
        ],
+
    ],
+
 
+
];
+
</source>
+
}}
+
{{MRM_Puntos clave|Como podemos ver '''''la autentificación''''' en Laravel está configurada por dos elementos que podemos modificar: '''''Guards''''' y '''''Providers'''''.
+
{{MRM_Definicion|Title=Guards y Providers|
+
*'''''Guards''''' definen  cómo los usuarios son autentificados en cada solicitud. Por ejemplo sesiones o tokens
+
*'''''Providers''''' Definen cómo se obtienen los datos almacenados de manera persistente en el sistema. (Base de datos, tabla, campos ...)
+
}}
+
}}
+
 
+
====Activando la autentificación por defecto de laravel====
+
Usamos la línea de comandos con artisan, creamos el módulo '''''auth''''' en nuestra aplicación
+
 
<source lang=bash>
 
<source lang=bash>
{23:44}~ ➭ php artisan make:auth
+
php artisan migrate
Authentication scaffolding generated successfully.
+
{0:29}~ ➭
+
 
</source>
 
</source>
{{MRM_Pregunta|Title=Qué ha ocurrido|
+
;Para usar
;1.-Se ha creado 1 controlador (app/Http/Controller/HomeController.php)
+
{{MRM_Actividad|Title=Otros controladores disponibles|
+
Toda app dispone de 4 controladores para gestionar los usuarios
+
  app/Http/Controller/Auth
+
[[Imagen:controller_auth.png|400px|center]]
+
}}
+
;2.-Se ha añadido nuevas entradas en las rutas routes/web.app
+
<source lang=php>
+
//...
+
Auth::routes();
+
Route::get('/home', 'HomeController@index');
+
//...
+
</source>
+
;3.-Se han creado las siguientes vistas /resources/view/
+
[[Imagen:laravel_auth2.png|400px|center]]
+
}}
+
{{MRM_Actividad|Title=Controladores disponibles para autentificar|
+
;HomeController
+
*Este controlador se genera al activar el módulo '''''auth'''''.
+
*Con él podremos gestionar las solicitudes después haber sido logueados.
+
;RegisterController
+
Registro del usuarios
+
;LoginController
+
Gestiona la autentificación.
+
;ForgotPasswordController
+
Gestión de una password olvidada por parte de un usuario
+
;ResetPasswordController
+
Lógica para controlar resetear una password
+
}}
+
{{MRM_Actividad|Title=Invocar a los formuarios|
+
*Podemos invocar a los formularios desde nuestra vista
+
<source lang=html5>
+
  <a class="btn  href= {{ route('register') }}>REGISTRATE</a>
+
  <a class="btn href={{ route('login') }}>ACCEDER</a>
+
</source>
+
}}
+
{{MRM_Actividad|Title=Establecer enlaces con logín|
+
*Los '''''middeleware''''' son filtros que se pueden poner antes o después de acceder a un recurso establecido en '''''web.php'''''
+
*De esta forma podemos establecer que para acceder a determinadas páginas o recursos  hay que loguearse previamente
+
*Por ejemplo tenemos varias páginas con restricciones de acceso, informes, alumnos y empresas serían recursos que necesitarían login para acceder
+
<source lang=php>
+
  
Route::get('/about', function () {
+
*Para establecer routas protegidas (solo accesibles si logueado)
    return view('about');
+
});
+
Route::get('/contacta', function () {
+
    return view('contacta');
+
});
+
  
Route::get('/alumnos', function () {
+
Route::get("xx", function (){
    return view('alumnos');
+
return view("xxxxxx");})->middelware("auth");
})->middleware('auth');
+
Route::get('/informes', function () {
+
    return view('practicas');
+
});
+
Route::get('/empresas', function () {
+
    return view('empresas');
+
})->middleware('auth');
+
  
 
+
*Si en una vista quiero si estoy logueado
 
+
 
+
</source>
+
}}
+
 
+
 
+
{{Tip|En muchos casos, activar la autentificación por defecto es suficiente, pero conviene conocer cómo modificar determinados comportamientos por defecto}}
+
{{MRM_Actividad|Ttitle=Personalizando la autentificación|
+
#Página inicial una vez logueado.
+
#Campos para validar al ususario.
+
#Protegiendo rutas.
+
}}
+
 
+
===Página inicial===
+
<br />
+
{{MRM_Puntos clave|Title=Página a redirigir una vez logueado|
+
;Atributo
+
 
<source lang=php>
 
<source lang=php>
protected redirectTo='/home';
+
  @auth
</source>
+
            <h2>Conectado como {{auth()->user()->name}}</h2>
De los controladores:
+
            <form action="{{route("logout")}}" method='post'>
;LoginController.php
+
                @csrf
;RegisterController.php
+
                <x-button>Desconectar</x-button>
;ResetPasswordController.php
+
            </form>
Se puede especificar también el método
+
        @endauth
<source lang=php>
+
        @guest
protected function redirectTo()
+
                <a href="{{route("login")}}"><x-button>Login</x-button></a>
{
+
                <a href="{{route("register")}}"><x-button>Registrarme</x-button></a>
    return '/path';
+
}
+
</source>
+
{{Tip|El método tiene preferencia sobre el atributo}}
+
}}
+
===Protegiendo rutas===
+
*Establecer páginas o rutas, que solo se sirven si se está logueado.
+
*Si tengo una ruta de una página
+
<source lang=php>
+
Route::get('/productos', 'ControladorProductos@get')
+
</source>
+
*Si la quiero proteger con autentificación:
+
<source lang=php>
+
Route::get('/productos', 'ControladorProductos@get')->middleware('auth');
+
</source>
+
  
 +
        @endguest
  
 
<br />
 
 
 
 
 
 
{{MRM_Puntos clave|Title=Migraciones para la autentificación|
 
;1.-Creamos la base de datos
 
;2.-Configuramos correctamente el fichero
 
<source lang=bash>
 
config/database.php
 
</source>
 
Valores de parámetros aportados en el fichero '''''.env'''''
 
[[Imagen:usuariosLaravelMigraciones.png]]
 
;3.-Instalamos el módulo de migraciones
 
<source lang=bash>
 
php artisan migrate:install
 
</source>
 
*Nos habrá creado la tabla '''''migration''''' en la base de datos especificada
 
Migration table created successfully.
 
;4.- Ejecutamos la migración que viene por defecto
 
<source lang=bash>
 
php artisan migrate
 
 
</source>
 
</source>
Nos generará la siguiente salida indicando que ha creado dos tablas
+
*Recordar las rutas creadas
  Migrating: 2014_10_12_000000_create_users_table
+
  routes/auth.php
Migrated:  2014_10_12_000000_create_users_table
+
*Para verlas
  Migrating: 2014_10_12_100000_create_password_resets_table
+
  php artisan route:list
  Migrated:  2014_10_12_100000_create_password_resets_table
+
*Controladores creados
}}
+
  http/controllers/auth
{{Nota|
+
#Si la primera vez que intentáis registrar un usuario no deja, cierra el servidor y vuélvelo a arrancar y prueba
+
#Verifica el fichero de configuración de las conexiones
+
#Busca en stackoverflow ...
+
}}
+
  
 +
;Modificar la página a la que me redirige una vez logueado
 +
Const HOME en Providers/RouteServiceProviders
  
{{MRM_Puntos clave|Title=Campo de validacion|
 
*Para identificarte por defecto pide el email
 
*Si quieres que solicite otro campo:
 
:1.- Establece el nombre del campo en el controlador LoginControler
 
<source lang=php>
 
public function username(){
 
  return ("name"); //Ahora será este el campo por el que se validará
 
}
 
:2.-Actualiza la plantilla correspondiente
 
</source>
 
  
 +
}}-->
  
  
}}
 
  
  
  
  
 +
===Conceptos generales===
 +
*La autentificación es otra de las muchas tareas comunes en cualquier aplicación que en el fondo no es parte de la aplicación sino un nivel de seguridad o compromiso que nuestra app pretende adoptar.
 +
*Laravel gestiona la autentificación en varios ficheros según vamos a ver a continuación.
 +
*Laravel nos ofrece la autentificación como un servicio.
 +
*Laravel tiene preconfigurada la autentificación la cual la podemos activar de manera sencilla.
 +
*Sistemas de authentificación posibles con laravel:
 +
#Autentificación básica con http
 +
#Breeze
 +
#Fortity
 +
#Jetstream
 +
#Sanctum
 +
#Passport
 +
<!--
 +
====Autentificación básica con http====
  
  
  
 
+
====Autentificación implementada en Laravel: Breeze====
 
+
*Este paquete aporta los siguientes elementos:
*La idea es usar un milddeware, entendido como un software intermedio entre la página que solicito y la que el servidor me entrega
+
;En el backend:
*De esta forma siempre que solicite una página que necesite estar registrado, antes de servirla voy a verificar si estoy o no registrado
+
Vistas
*Anteriormente (en veriones 4 o anterior), este concepto se conocía como filtro, ahora en esta versión se conoce como ya hemos comentado como '''''Middleware'''''.
+
  Rutas y controladores
*La idea es antes de cargar una página que se verifica  ver si el usuario está autentificado
+
;En el frontend
*La descripción algorítmica sería
+
Tailwindcss/blade
  1.- Si  está registrado  entrego la página solicitada
+
;Acciones implementadas:
  2.- Si no lo está le redirijo a una página de logueo para que se acredite o registre
+
  Registro
  2.-1 Cuando lo haga le doy paso a la página solicitada
+
  Login
  3.- En caso de no autentificarse le doy una información de error.
+
  Logout
*En Laravel todo está preparado y configurado, para que con unas pequeñas acciones podamos adaptar esa configuración a nuestras necesidades. Bastaría con hacer las siguientes acciones como indican en la página de referencia
+
  Resestablecimiento de contraseña
<source lang=bash>
+
Confirmación por email
  php artisan make:auth and
+
   
php artisan migrate
+
</div>
</source>
+
-->
Entonces acceemos a nuestra app
+
http://localhost:8000/register
+
 
+
===Gestionar los datos de la autentificacion===
+
*Por defecto tenemos un modelo llamado '''''User''''' con su tabla por defecto '''''users'''''
+
*Esa tabla logicamente hay que construirla. Podemos hacerlo con migraciones.
+
Entre otros campos debe contener
+
*campo remenber_token de 100 caracteres, permitiendo el valor nulo. Campo usado para recordar entre sesiones
+
*Para incluir este campo con migraciones usaremos
+
<source lang=php>
+
$table->rememberToken()
+
</source>
+
*Para gestionar la validación Laravel incluye el modelo '''''app/User.php'''''
+
 
+
===Gestión de contraseñas===
+
;make crear una contraseña
+
Hash::make('secret');
+
;check validar una contraseña
+
Hash::check('secret',$hashedPassword);
+
;Tengo que volver a hacer el hash de una contraseña
+
if (Hash::needsRehash($hashed))
+
{
+
    $hashed = Hash::make('secret');
+
}
+

Última revisión de 17:14 21 mar 2023


https://www.youtube.com/watch?v=BXXmboZRLYo




Conceptos generales

  • La autentificación es otra de las muchas tareas comunes en cualquier aplicación que en el fondo no es parte de la aplicación sino un nivel de seguridad o compromiso que nuestra app pretende adoptar.
  • Laravel gestiona la autentificación en varios ficheros según vamos a ver a continuación.
  • Laravel nos ofrece la autentificación como un servicio.
  • Laravel tiene preconfigurada la autentificación la cual la podemos activar de manera sencilla.
  • Sistemas de authentificación posibles con laravel:
  1. Autentificación básica con http
  2. Breeze
  3. Fortity
  4. Jetstream
  5. Sanctum
  6. Passport