Los eventos de Laravel proporcionan una implementación de observador simple, lo que permite suscribirse y escuchar diversos eventos que ocurren en tu aplicación. Las clases de eventos normalmente se almacenan en el directorio app/Events, mientras que tus oyentes se almacenan en app/Listeners. No te preocupes si no ves estos directorios en tu aplicación, ya que se crearán para ti cuando generes eventos y oyentes utilizando los comandos de consola Artisan.
Los eventos sirven como una excelente manera de desacoplar varios aspectos de tu aplicación, ya que un solo evento puede tener múltiples oyentes que no dependen entre sí. Por ejemplo, es posible que desees enviar una notificación de Slack a tu usuario cada vez que se envíe un pedido. En lugar de acoplar tu código de procesamiento de pedidos a tu código de notificación Slack, puedes generar un evento OrderShipped, que un oyente puede recibir y transformar en una notificación Slack.
Registro de eventos y oyentes
El EventServiceProvider incluido en tu aplicación Laravel proporciona un lugar conveniente para registrar todos los oyentes de eventos de tu aplicación. La propiedad listen contiene un arreglo de todos los eventos (claves) y sus oyentes (valores). Puedes agregar tantos eventos a este arreglo como lo requiera tu aplicación. Por ejemplo, agreguemos un evento OrderShipped:
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\OrderShipped' => [
'App\Listeners\SendShipmentNotification',
],
];
La clase Illuminate\Support\Collection provee una interfaz fluida y conveniente para trabajar con arreglos de datos. Por ejemplo, mira el siguiente código. Usaremos la función helper collect para crear una nueva instancia de Collection pasando un arreglo como parámetro, se ejecuta la función strtoupper en cada elemento y luego elimina todos los elementos vacíos:
Como puedes ver, la clase Collection te permite encadenar sus métodos para realizar un mapeo fluido y reducir el arreglo subyacente. En general, las colecciones son inmutables, es decir, cada método de Collection retorna una nueva instancia de Collection.
Laravel proporciona una API expresiva y unificada para varios backends de almacenamiento de caché. La configuración de caché está ubicada en config/cache.php. En este archivo puedes indicar el controlador de caché que desees utilizar por defecto en toda tu aplicación. Laravel es compatible con los almacenamientos en caché más populares, tales como Memcached y Redis.
El archivo de configuración de caché contiene otras opciones adicionales, las cuales están documentadas dentro del mismo archivo, por lo que deberás asegurarte de revisar estas opciones. Por defecto, Laravel está configurado para utilizar el controlador de caché file, que almacena los objetos serializados y almacenados en caché en el sistema de archivos. Para aplicaciones más grandes, es recomendable que utilices un controlador más robusto como Memcached o Redis. Incluso puedes configurar múltiples configuraciones de caché para el mismo controlador.
En muchas aplicaciones web modernas, los WebSockets son usados para implementar interfaces de usuarios actualizadas en tiempo real. Cuando algún dato es actualizado en el servidor, un mensaje es típicamente enviado a través de una conexión WebSocket para ser manejado por el cliente. Esto proporciona una alternativa más robusta y eficiente para monitorear continuamente tu aplicación en busca de cambios.
Para asistirte en la construcción de ese tipo de aplicaciones, Laravel hace fácil «emitir» tus eventos a través de una conexión WebSocket. Emitir tus eventos te permite compartir los mismos nombres de eventos entre tu código del lado del servidor y tu aplicación JavaScript del lado de cliente.
Antes de sumergirnos en la emisión de eventos, asegúrate de haber leído toda la documentación de Laravel sobre eventos y listeners.
Artisan es la interfaz de línea de comando incluida con Laravel. Provee un número de comandos útiles que pueden ayudarte mientras construyes tu aplicación. Para ver una lista de todos los comandos Artisan disponibles, puedes usar el comando list:
php artisan list
También cada comando incluye una «ayuda» en pantalla, la cual muestra y describe los argumentos y opciones disponibles. Para ver una pantalla de ayuda, coloca help antes del nombre del comando:
¿Quieres comenzar rápido? Instala el paquete de Composer laravel/ui y ejecuta php artisan ui vue --auth en una aplicación de Laravel nueva. Luego de migrar tu base de datos, navega hasta http://your-app.test/register o cualquier otra URL asignada a tu aplicación. Este simple comando se encargará de maquetar todo tu sistema de autenticación, ¡incluyendo el restablecimiento de contraseñas!.
La mayoría de las aplicaciones web proporcionan una forma para que los usuarios restablezcan sus contraseñas olvidadas. En lugar de forzarte a reimplementar esto en cada aplicación, Laravel proporciona métodos convenientes para enviar recordatorios de contraseñas y realizar restablecimientos de contraseñas.
Antes de usar las características de restablecimiento de contraseñas de Laravel, tu usuario debe usar el trait Illuminate\Notifications\Notifiable.
Consideraciones de la base de datos
Para comenzar, verifica que tu modelo App\User implementa el contrato Illuminate\Contracts\Auth\CanResetPassword. El modelo App\User incluido con el framework ya implementa esta interfaz y usa el trait Illuminate\Auth\Passwords\CanResetPassword para incluir los métodos necesarios para implementar la interfaz.
Generando la migración para la tabla de tokens de restablecimiento
Luego, una tabla debe ser creada para almacenar los tokens de restablecimiento de contraseña. La migración para está tabla está incluida con Laravel por defecto y se encuentra en el directorio database/migrations. Así que, todo lo que necesitas hacer es ejecutar tus migraciones de la base de datos:
php artisan migrate
Enrutamiento
Laravel incluye las clases Auth\ForgotPasswordController y Auth\ResetPasswordController que contienen la lógica necesaria para enviar enlaces de restablecimiento de contraseña por correo electrónico y restablecer contraseñas de usuarios. Todas las rutas necesarias para realizar restablecimiento de contraseñas pueden ser generadas usando el paquete de Composer: laravel/ui:
Estas vistas están ubicadas en resources/views/auth/passwords. Eres libre de personalizarlas según sea necesario para tu aplicación.
Después de restablecer contraseñas
Una vez que has definido las rutas y vistas para restablecer las contraseñas de tus usuarios, puedes acceder a la ruta en tu navegador en /password/reset. El ForgotPasswordController incluido con el framework ya incluye la lógica para enviar los correos con el enlace de restablecimiento, mientras que ResetPasswordController incluye la lógica para restablecer las contraseñas de los usuarios.
Luego de que una contraseña es restablecida, la sesión del usuario será automáticamente iniciada y será redirigido a /home. Puedes personalizar la ubicación de redirección definiendo una propiedad redirectTo en ResetPasswordController:
protected $redirectTo = '/dashboard';
Por defecto, los tokens para restablecer contraseñas expiran luego de una hora. Puedes cambiar esto mediante la opción de restablecimiento de contraseñas expire en tu archivo config/auth.php.
Personalización
Personalización de los guards de autenticación
En tu archivo de configuración auth.php, puedes configurar múltiples «guards», que podrán ser usados para definir el comportamiento de autenticación para múltiples tablas de usuarios. Puedes personalizar el controlador ResetPasswordController incluido para usar el guard de tu preferencia sobrescribiendo el método guard en el controlador. Este método debe retornar una instancia guard:
use Illuminate\Support\Facades\Auth;
/**
* Get the guard to be used during password reset.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard()
{
return Auth::guard('guard-name');
}
Personalización del broker de contraseña
En tu archivo de configuración auth.php, puedes configurar múltiples «brokers» de contraseñas, que pueden ser usados para restablecer contraseñas en múltiples tablas de usuarios. Puedes personalizar los controladores ForgotPasswordController y ResetPasswordController incluidos para usar el broker de tu elección sobrescribiendo el método broker:
use Illuminate\Support\Facades\Password;
/**
* Get the broker to be used during password reset.
*
* @return PasswordBroker
*/
public function broker()
{
return Password::broker('name');
}
Personalización del correo de reseteo
Puedes fácilmente modificar la clase de la notificación usada para enviar el enlace de restablecimiento de contraseña al usuario. Para comenzar, sobrescribe el método sendPasswordResetNotification en tu modelo User. Dentro de este método, puedes enviar la notificación usando cualquier clase de notificación que selecciones. El $token de restablecimiento de contraseña es el primer argumento recibido por el método:
/**
* Send the password reset notification.
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPasswordNotification($token));
}
El facadeHash de Laravel proporciona hashing seguro de Bcrypt y Argon2 para almacenar contraseñas de usuarios. Si estás usando las clases integradas LoginController y RegisterController que están incluidas con tu aplicación de Laravel, usarán Bcrypt para registro y autenticación de forma predeterminada.
Bcrypt es una buena opción para el hashing de contraseñas dado que su «factor de trabajo» es ajustable, lo que quiere decir que el tiempo que toma generar un hash puede ser aumentado a medida que la capacidad de hardware incrementa.
Configuración
El driver de hashing por defecto para tu aplicación está configurado en el archivo de configuración config/hashing.php. Actualmente hay tres drivers soportados: Bcrypt y Argon2 (variantes Argon2i y Argon2id).
El driver Argon2i requiere PHP 7.2.0 o superior y el driver Argon2id requiere PHP 7.3.0 o superior.
Uso básico
Puedes hacer hash a una contraseña llamando al método make en el facade Hash:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class UpdatePasswordController extends Controller
{
/**
* Update the password for the user.
*
* @param Request $request
* @return Response
*/
public function update(Request $request)
{
// Validate the new password length...
$request->user()->fill([
'password' => Hash::make($request->newPassword)
])->save();
}
}
Ajustando el factor de trabajo de Bcrypt
Si estás usando el algoritmo Bcrypt, el método make te permite administrar el factor de trabajo del algoritmo usando la opción rounds; sin embargo, el valor por defecto es aceptable para la mayoría de las aplicaciones:
Si estás usando el algoritmo de Argon2, el método make te permite administrar el factor de trabajo del algoritmo usando las opciones memory, time y threads; sin embargo, los valores por defecto son aceptables para la mayoría de las aplicaciones:
El método check te permite verificar que una cadena de texto plano dada corresponde a un hash dado. Sin embargo, si estás usando el LoginControllerincluido con Laravel, probablemente no necesitarás usar esto directamente, ya que este controlador automáticamente llama a este método:
if (Hash::check('plain-text', $hashedPassword)) {
// The passwords match...
}
Comprobando si una contraseña necesita un nuevo hash
La función needsRehash te permite determinar si el factor de trabajo usado por el hasher ha cambiado desde que el hash fue agregado a la contraseña:
if (Hash::needsRehash($hashed)) {
$hashed = Hash::make('plain-text');
}
El cifrado de Laravel utiliza OpenSSL para proporcionar el cifrado AES-256 y AES-128. Se recomienda encarecidamente usar las funciones de cifrado incorporadas de Laravel y no intentar utilizar algoritmos de cifrado «hechos por ti mismo». Todos los valores cifrados de Laravel son firmados utilizando un código de autenticación de mensaje (MAC) para que su valor subyacente no pueda modificarse una vez cifrado.
Configuración
Antes de usar el cifrado de Laravel, debes establecer la opción key en tu archivo de configuración config/app.php. Deberías usar el comando php artisan key:generate para generar esta clave, ya que este comando de Artisan usará el generador de bytes aleatorios seguros de PHP para construir tu clave. Si este valor no se establece correctamente, todos los valores cifrados por Laravel serán inseguros.
Usando el cifrador
Cifrar un valor
Puedes cifrar un valor usando el helper o función de ayuda encrypt. Todos los valores cifrados se cifran utilizando OpenSSL y el cifrado AES-256-CBC. Además, todos los valores cifrados están firmados con un código de autenticación de mensaje (MAC) para detectar cualquier modificación en la cadena cifrada:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Store a secret message for the user.
*
* @param Request $request
* @param int $id
* @return Response
*/
public function storeSecret(Request $request, $id)
{
$user = User::findOrFail($id);
$user->fill([
'secret' => encrypt($request->secret),
])->save();
}
}
Cifrado sin serialización
Los valores cifrados se pasan a través de una serialización durante el proceso de cifrado, lo que permite el cifrado de objetos y arreglos. De este modo, los clientes que no son PHP y reciben valores cifrados tendrán que des-serializar los datos. Si deseas cifrar y descifrar valores sin serialización, puede usar los métodos encryptString y decryptString de la facade Crypt:
use Illuminate\Support\Facades\Crypt;
$encrypted = Crypt::encryptString('Hello world.');
$decrypted = Crypt::decryptString($encrypted);
Descifrando un valor
Puedes descifrar los valores usando el helper o función de ayuda decrypt. Si el valor no se puede descifrar correctamente, como cuando el MAC no es válido, se lanzará una excepción Illuminate\Contracts\Encryption\DecryptException:
Muchas aplicaciones web requieren que los usuarios verifiquen sus correos electrónicos antes de usar la aplicación. En lugar de forzarte a volver a implementar esto en cada aplicación, Laravel proporciona métodos convenientes para enviar y verificar solicitudes de verificación de correos electrónicos.
Preparación del modelo
Para comenzar, verifica que tu modelo App\User implementa la interfaz Illuminate\Contracts\Auth\MustVerifyEmail:
<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;
// ...
}
Consideraciones de la base de datos
Columna de verificación de correo electrónico
Luego, tu tabla users debe contener una columna email_verified_at para almacenar la fecha y la hora en la que la dirección de correo electrónico fue verificada. Por defecto, la migración de la tabla users incluida con el framework Laravel ya incluye esta columna. Así que, lo único que necesitas es ejecutar la migración de la base de datos:
php artisan migrate
Rutas
Laravel incluye la clase Auth\VerificationController que contiene la lógica necesaria para enviar enlaces de verificación y verificar correos electrónicos. Para registrar las rutas necesarias para este controlador, pasa la opción verify al método Auth::routes:
Además de proveer servicios de autenticación por defecto, Laravel además provee una forma simple de autorizar acciones del usuario contra un recurso dado. Como con la autenticación, el enfoque de Laravel para la autorización es simple, y hay dos maneras principales de autorizar acciones: gates y policies (puertas y políticas).
Piensa en los gates y políticas como rutas y controladores. Los Gates proveen una manera simple, basada en funciones anónimas, para definir las reglas de autorización; mientras que las políticas, como los controladores, agrupan la lógica para un modelo o recurso en específico. Vamos a explorar los gates primero y luego las políticas.
No necesitas elegir entre el uso exclusivo de gates o de políticas cuando construyas una aplicación. Lo más probable es que la mayoría de las aplicaciones contengan una mezcla de gates y de políticas ¡Y eso está completamente bien! Los gates son más aplicables a acciones que no estén relacionadas a ningún modelo o recurso, como por ejemplo ver el panel de control de un administrador. Por otro lado, las políticas deberán ser usadas cuando desees autorizar una acción para un modelo o recurso en particular.
Styde usa cookies para guardar tus preferencias y para seguimiento anónimo AceptarLeer más
Privacy & Cookies Policy
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.