4. Instalar Laravel
Una vez instalado el Composer en Windows, se debe abrir una consola de símbolo de sistema
y ejecutar:
composer global require laravel/installer
Se debe crear un directorio y ubicarse donde se desee crear el proyecto de laravel,
ejecutando el siguiente comando:
laravel new ICOSALUDAPI
5. Configurar la conexión a la Base de
Datos
Debemos abrir el proyecto con el editor de código de su preferencia, en esta ocasión
utilizaremos visual studio code, para editar el archivo .env donde se podrá configurar la
conexión a la base de datos, para usar el driver de postgresql, debe digitar pgsql en
DB_CONNECTION:
6. Instalar Liberia para JWT
Abrimos una consola de comandos desde el VSCODE o en el símbolo del sistema y
ejecutamos:
composer require tymon/jwt-auth
Una vez termine la instalación se debe ejecutar la siguiente línea para publicar la
configuración:
php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"
Debemos agregar la siguiente línea en el archivo app.php ubicado en el directorio config:
TymonJWTAuthProvidersLaravelServiceProvider::class,
7. Configurar JWT
Debemos ejecutar en la terminal de comandos o el CMD lo siguiente para agregar al
archivo .env la clave secreta con la que se va firmar JWT.
php artisan jwt:secret
Luego agregamos en el archivo Auth.php que se encuentra en la carpeta config la los
parametros para agregar la capa de seguridad a la API y seleccionar el driver JWT:
8. Configurar JWT
Se debe realizar las siguientes modificaciones al modelo users.php
1. Importar la librería: Use TymonJWTAuthContractsJWTSubject
2. Implementar la interface: implements JWTSubject
3. Agregar estos métodos: public function getJWTIdentifier() {
return $this->getKey();
}
/** Return a key value array, containing any custom
claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims() {
return [];
}
9. Configurar Rutas para Autenticacion
Una vez configurado esto vamos a agregar las rutas en directorio routes archivo api.php
Route::group([
'middleware' => 'api',
'prefix' => 'auth'
], function ($router) {
Route::post('signup', [AuthController::class, 'signup']);
Route::post('login', [AuthController::class, 'login']);
Route::post('logout', [AuthController::class, 'logout']);
//Route::post('login', 'AuthController@login');
//Route::post('logout', 'AuthController@logout');
Route::post('refresh', 'AuthController@refresh');
Route::post('me', 'AuthController@me');
});
10. Crear el AuthController
Se debe crear el controlador encargado del registro y autenticación de los usuario:
php artisan make:controller AuthController
Una vez creado el controlador se debe importar las siguiente Librerias:
use IlluminateSupportFacadesAuth;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
use AppModelsUser;
11. Crear el AuthController
Se debe crear el constructor para configurar las excepciones de seguridad:.
Procedemos a crear el método login()
public function __construct()
{
$this->middleware('auth:api', ['except' => ['login', 'signup']]);
}
public function login()
{
$credentials = request(['email', 'password']);
if (! $token = auth()->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return $this->respondWithToken($token);
}
12. Crear el AuthController
Se debe crear también una función para retornar el usuario autenticado:
Luego a creamos el método logout()
public function me()
{
return response()->json(auth()->user());
}
public function logout()
{
auth()->logout();
return response()->json(['message' => 'Successfully logged out']);
}
13. Crear el AuthController
Luego se crea agrega la función refresh, para mantener la sesión actualizando el token:
Creamos la función que nos regresa el token esta debe estar protegida:
public function refresh()
{
return $this->respondWithToken(auth()->refresh());
}
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 60
]);
}
15. Crear Modelos a partir de la Base de
Datos
Si tenemos una base de datos estructurada y configurada, podemos instalar la siguiente librería para
crear los modelos:
composer require reliese/laravel
Se debe publicar la configuración:
php artisan vendor:publish --tag=reliese-models
Luego ejecutamos el siguiente comando para crear el modelo desde la base de datos(especificando el
nombre de la tabla en --table:
php artisan code:models --table=cita
Fuente: https://github.com/reliese/laravel
26. Agregamos la Capa de Seguridad
• Vamos nuevamente a las rutas y movemos todo lo que necesite autenticación
dentro del siguiente código:
Route::group(['middleware' => [‘api']], function() {
//Todo lo que este dentro de este grupo requiere
verificación de usuario.
}
27. TRAIT PHP - LARAVEL
USO DE TRAITS FILTROS Y RESPUESTA GENERAL
28. TRAIT
• Los traits son un mecanismo de reutilización de código en
leguajes que tienen herencia simple, como PHP. El objetivo de los traits es
reducir las limitaciones de la herencia simple permitiendo reutilizar métodos
en varias clases independientes y de distintas jerarquías.
• Esto es un concepto netamente de diseño, por lo cual para su aplicación
debemos crear el directorio o la carpeta llamada Traits, donde vamos
almacenar todas las clases que vamos a usar como Trait en las diferentes
clases de nuestro proyecto, normalmente para las API se puede utilizar el
trait de manera publica para todos los controladores declarando su uso en el
controlador principal.
29. Crear el Trait
• Se debe crear el directorio Traits y luego crear un nuevo archivo, por ejemplo
ApiResponser.php, luego declarar el encabezado <?php el namespace y se
inicializa con la palabra clae trait seguido del nombre que deseamos ponerle:
30. Declarar Funciones y Procedimientos
del TRAIT
• Podemos declarar diferentes funciones dentro del trait las cuales vamos a utilizar
como una especie de funciones publicar en cualquier controlador si declaramos
que se usara el trait en el controlador base.
32. Filtros
• Dentro de nuestro trait principal podemos declarar funciones dinámicas que
permitan el filtrado de datos de nuestra API, modificando la funciones mediante
la cual se muestran todos los datos y aplicándoles las diferentes funciones
necesarias: