26 videos • 📅 2024-02-06 09:00:00 America/Bahia_Banderas
9:42
2024-02-06 10:11:16
6:47
2024-02-06 10:22:16
5:15
2024-02-06 10:31:49
3:57
2024-02-06 10:38:48
17:59
2024-02-06 10:43:27
1:06
2024-02-06 11:12:41
10:20
2024-02-06 11:15:29
2:42
2024-02-06 11:26:39
11:03
2024-02-06 12:01:53
1:16
2024-02-06 12:14:47
42:32
2024-02-06 12:19:55
10:32
2024-02-07 10:25:03
4:02
2024-02-07 10:39:09
1:54:16
2024-02-07 10:45:07
2:11:58
2024-02-07 20:24:23
11:55
2024-02-08 10:29:34
15:14
2024-02-08 10:43:38
3:39
2024-02-08 11:02:01
1:28:10
2024-02-08 11:14:14
1:31:21
2024-02-08 21:37:16
2:33:55
2024-02-09 09:35:00
15:39
2024-02-09 12:49:52
1:17:31
2024-02-12 09:26:50
36:07
2024-02-12 10:56:05
8:43
2024-02-13 12:48:13
3:05
2024-02-14 10:23:00

Visit the Oracle Database 19c: Administration course recordings page

United Arab Emirates - Oracle Database 19c Security

                WEBVTT

00:00:00.000 --> 00:00:00.220
el sistema operativo. Vamos

00:00:00.220 --> 00:00:04.660
virtual box. Un virtual box

00:00:05.580 --> 00:00:07.120
instalamos en cada una de esas

00:00:07.120 --> 00:00:10.440
dos máquinas. Se llama

00:00:10.440 --> 00:00:13.620
un server. A la última vez, si

00:00:13.620 --> 00:00:14.780
quieres pon tu mute y ya si

00:00:14.780 --> 00:00:16.900
tienes dudas, me me me

00:00:16.900 --> 00:00:20.100
interrumpes. Dos máquinas en

00:00:20.100 --> 00:00:30.940
la una con Ubuntu Server. Este Ubuntu Server es este sistema operativo que no tiene interfaz

00:00:30.940 --> 00:00:38.020
por la línea de comandos. En esta madre te venían ahí unos requerimientos que básicamente

00:00:38.020 --> 00:00:45.000
era crear este redirección de puertos y la creación de un proxy para la parte del

00:00:45.000 --> 00:00:53.220
frontend. La parte del frontend ahí no te pedían nada, realmente respecto a puertos y proxys

00:00:53.220 --> 00:01:06.300
nada. Eso de lo del proxy inverso creo que venía así, proxy inverso y ya y restricción

00:01:06.300 --> 00:01:19.920
de puertos. Entonces, dentro de Ubuntu Server para hacer eso del proxy inverso, de hecho no es cierto.

00:01:21.360 --> 00:01:28.540
Bueno, a ver, antes de decir qué hizo, qué hizo cada cosa, ahorita nada más voy a instalar lo

00:01:28.540 --> 00:01:34.500
que se ocupó. Entonces, las máquinas Ubuntu Server, el sistema operativo, se instaló Nginx.

00:01:34.500 --> 00:01:40.600
Nginx se instala en cada uno de los, de las dos máquinas, tanto en Ubuntu, tanto en

00:01:40.600 --> 00:01:52.420
Livefront como en la del VAC. Nginx. NPM, que es un gestor de Node, esta aplicación. Ellos

00:01:52.420 --> 00:01:59.300
te pedían dos máquinas virtuales porque el objetivo era crear un API, un API y un frontend

00:01:59.300 --> 00:02:06.760
que se pudiera comer ese API de una tabla de usuarios. Es lo que pedían, un formulario de

00:02:06.760 --> 00:02:15.300
login y un registro. Entonces, era un CRUD, un formulario de login, un registro y listo.

00:02:16.220 --> 00:02:23.380
Además, la aplicación tenía que tener tokens, tokens de seguridad para proteger el API respecto

00:02:23.380 --> 00:02:29.020
al tema de la seguridad. Entonces, todo eso es lo que te estaban pidiendo y pues bueno,

00:02:29.020 --> 00:02:35.360
se va viendo que ocupas en cada una, ¿no? El backend, entonces tienes el Node Package Manager,

00:02:35.880 --> 00:02:41.740
es una aplicación full stack porque se ocupa un frontend y un backend. Entonces, ya por eso,

00:02:42.580 --> 00:02:49.820
te digo, tú decidiste desarrollarlo con el full stack de JavaScript. Entonces,

00:02:50.080 --> 00:02:57.020
todo esto, tanto el front como el back, es una aplicación, bueno, no es Mongo,

00:02:57.020 --> 00:03:05.720
aquí más bien es este, creo que es MySQL lo que nos pedía de instalar. MySQL nos pidió instalar

00:03:05.720 --> 00:03:16.400
este, ah, pues es MySQL, nos pidió instalar Node o Nexpress para crear el backend, View y

00:03:16.400 --> 00:03:26.200
pues ya. Obviamente, pues TypeScript y Beautify. Entonces, este, pues de aquí ya nada más vas

00:03:26.200 --> 00:03:31.960
viendo cuáles son las tecnologías del front y cuáles son del back, ¿no? En este caso,

00:03:32.000 --> 00:03:38.120
pues esto es del back, es la base de datos, esto es del backend y todo lo demás es frontend,

00:03:38.120 --> 00:03:44.740
¿no? Todo esto de acá es del frontend. Beautify, nada más la remembranza es este,

00:03:44.900 --> 00:03:52.760
el framework de View para crear interfaces web. Es como Angular Material y este sería Angular,

00:03:52.760 --> 00:04:00.000
el equivalente Angular y este sería el Angular Material. Listo, entonces ya con eso tienes las

00:04:00.000 --> 00:04:08.160
dos máquinas, la 1 y la 2, frontend, digo front y back. Y si te fijas, pues aquí está,

00:04:08.360 --> 00:04:16.920
¿no? Exus, MySQL, urm, del lado del front, npm, ambos tienen npm, distintos paquetes,

00:04:16.920 --> 00:04:22.240
cada uno va a tener View y Beautify. ¿Qué paquetes tienes del front? Pues View,

00:04:22.240 --> 00:04:27.320
Beautify, ¿no? ¿Qué paquetes tienes del back? Pues Node, Nexpress, el urm de MySQL,

00:04:27.460 --> 00:04:32.820
etcétera, etcétera. Entonces ya, aquí está lo que hace cada cosa. En este sentido,

00:04:33.760 --> 00:04:39.180
la máquina va a exponer un API sobre el modelo que te dan ahí, que es una tabla

00:04:39.180 --> 00:04:45.560
de usuarios, ¿no? Ese user lo vamos a mapear con ese urm y esta API es la que te

00:04:45.560 --> 00:04:51.860
dice que tiene que tener una autenticación. En este caso nosotros elegimos darle la

00:04:51.860 --> 00:04:59.880
autenticación por Viewer Token o una autenticación básica por token, así se llama, ¿no? Una

00:04:59.880 --> 00:05:08.740
autenticación por básica de token o también se conoce como Viewer Token. Es esto lo que tú vas a crear, ¿sí?

00:05:09.700 --> 00:05:16.040
Y pues ya, esto también lo maneja un paquete, ahí en la documentación. Ahorita bien, ahorita

00:05:16.040 --> 00:05:21.740
vemos en la hoja de la chuleta que otros paquetes vienen aquí en la parte del paquete.

00:05:24.280 --> 00:05:29.340
Por ejemplo, el tema de seguridad, la base de datos está encriptada en las contraseñas

00:05:29.960 --> 00:05:37.600
de las encriptas de ese paquete, ¿no? Te genera tokens y pues bueno, esa parte.

00:05:38.900 --> 00:05:44.640
Por ejemplo, ese lo puedes poner como un plus, ¿no? Tus contraseñas no te las pedían y las

00:05:44.640 --> 00:05:51.040
encriptamos. Nosotros las estamos encriptando. Y bueno, el API se basa en un crud. Tienes el

00:05:51.040 --> 00:05:59.220
create, el read, el read tiene paginado. Pero acuérdate, en el back end nosotros no lo

00:05:59.220 --> 00:06:03.560
paginamos nada más en el front. Por eso es que se ve tu data table con paginación,

00:06:03.640 --> 00:06:08.200
pero esa paginación es del lado del front. Tú nomás este wey de que, ah, sí, ahí está

00:06:08.200 --> 00:06:12.860
paginado, ¿no? Pero si te preguntan, realmente el back también debía tener paginado, ¿no?

00:06:12.960 --> 00:06:20.680
Los dos. Listo. Tienes un update y tienes un delete. Aquí estos, este crud tiene

00:06:20.680 --> 00:06:24.880
endpoints. Ahorita te voy a decir cuáles son esos endpoints, ¿sí? Que son los que te

00:06:24.880 --> 00:06:32.820
pasé y lo documentaste en formato curr, ¿no? En curr. C-U-R-L. Ahí yo, para que

00:06:32.820 --> 00:06:38.420
te pegues directo con postman. Y entonces esto es lo que tú tenías. Aquí nada más,

00:06:38.760 --> 00:06:44.820
este endpoint, este endpoint no existe. No hay un mecanismo para hacer la logout de

00:06:44.820 --> 00:06:50.580
tokens. Este no es un endpoint. Este no. Lo que sí es que tienes el create, el read,

00:06:51.660 --> 00:06:58.600
el read lo tienes por read all, ¿no? Todos los usuarios. Y este es el que lleva

00:06:58.600 --> 00:07:09.380
paginado o el read por ID. User by ID. Así se llama, ¿no? By ID. Y este por ID solamente

00:07:09.380 --> 00:07:16.880
es, traes un empleado único por identificador. Este te trae todos paginados. Todo esto,

00:07:17.140 --> 00:07:22.260
o sea, todos los endpoints, cualquiera, el create, el read, el loop, el update,

00:07:22.260 --> 00:07:29.540
el delete, llevan token y no es cierto. Ahí está el mal. La autenticación de token nada más va

00:07:30.840 --> 00:07:45.740
dentro del read, dentro del update y dentro del delete y dentro del login. Todos menos el

00:07:45.740 --> 00:07:50.420
create. O bueno, entonces lo podríamos dejar así, ¿no? Puedes dejar aquí tu API con

00:07:50.420 --> 00:07:55.840
autenticación y este le puedes, nada más el create es el único que, sin autenticación.

00:07:56.620 --> 00:08:05.360
¿Por qué no lleva autenticación? Porque cuando tú creas un registro, no eres un usuario

00:08:05.360 --> 00:08:12.280
registrado. Eres nuevo. Entonces no te voy a pedir un token cuando no existes. El token

00:08:12.280 --> 00:08:19.860
se crea cuando haces login. Entonces esto lo vamos a poner aquí. Crea token. Aquí.

00:08:20.600 --> 00:08:26.100
Este token se puede decir que es como el token de sesión, ¿no? Entonces para que haya un login,

00:08:26.300 --> 00:08:32.880
una sesión activa, se va a crear el token. Y ese token es el que ya no puedo ocupar. Entonces

00:08:32.880 --> 00:08:39.200
por eso en el create, el registro, este es el registro. Cuando existe el registro,

00:08:39.320 --> 00:08:44.820
ahí no va autenticación. Ahí yo dejo registrar a la gente que se quiera registrar.

00:08:46.560 --> 00:08:52.580
Bueno, así se diseñó. Está rápido. Obviamente pues es una regla de negocio, pero pues es,

00:08:53.020 --> 00:08:57.280
te lo pueden dictar ahí la gente, ¿no? Puede haber gente que te diga, no, sí, al create,

00:08:57.440 --> 00:09:02.560
ponle autenticación. Ah, bueno. En base a eso ya vas desarrollando. Yo hice un ejemplo

00:09:02.560 --> 00:09:11.900
Google. Y bueno, en la parte dos, el front-end, este view es la aplicación web. Se trae al,

00:09:13.940 --> 00:09:21.700
este, vaya, al final view te expone un template, por así decirlo, de carpetas, ¿no? Te va a decir

00:09:21.700 --> 00:09:25.240
que aquí hay algo, aquí hay algo, aquí hay algo, aquí hay algo, lo que tú quieras. Aquí

00:09:25.240 --> 00:09:32.980
las importantes son una carpeta. Bueno, es que view sí está un poco de más cosillas que ver,

00:09:33.160 --> 00:09:38.620
digamos, la estructura de la aplicación. Lo importante era ver el source. Más que nada el

00:09:38.750 --> 00:09:43.550
source. Dentro de esta carpeta source, hay otras carpetas, digamos, derivadas, ¿no?,

00:09:44.350 --> 00:09:55.510
que son importantes. Source, por ejemplo, dentro de source, podíamos ver los modelos,

00:09:56.630 --> 00:10:01.070
podíamos ver, no, no es cierto, modelos, no. No había models, no manajemos models.

00:10:01.670 --> 00:10:11.310
Había más bien este components, había views, sobre todo eso, y el service. Services. Estas

00:10:11.310 --> 00:10:18.210
tres son como que los principales. Entonces, este, los componentes básicamente son estructuras

00:10:18.210 --> 00:10:25.950
de software que te permiten, este, ser reusables. Ajá, es la unidad con la que se crean los,

00:10:25.950 --> 00:10:33.270
este, pues la mayoría de estos frameworks de frontend, ¿no? Angular, React, y ahorita ya lo

00:10:33.270 --> 00:10:37.990
compró View también. Todo, todos esos frameworks manejan componentes. Entonces,

00:10:38.050 --> 00:10:43.750
un componente es como una pieza dentro de una página web. Por ejemplo, este,

00:10:43.750 --> 00:10:48.070
este pinche cuadrito que ves aquí es un componente, ¿no? Eso que se ve ahí. Y ese,

00:10:48.290 --> 00:10:54.150
ese es un componente que se puede reusar tantas veces como list, como repositorios,

00:10:54.150 --> 00:10:58.470
la lista de tus repositorios tengas aquí adentro, por ejemplo. Si te fijas,

00:10:58.610 --> 00:11:04.490
es el mismo componente que tiene aquí un public, tiene un estado, tiene una pinche

00:11:04.490 --> 00:11:09.090
barrita acá. Entonces, ese componente se está reusando y se está iterando sobre alguna

00:11:09.090 --> 00:11:15.290
lista. N veces, aquí, mientras más repos tengas, este componente tal vez que se llame

00:11:15.290 --> 00:11:21.470
lista, lista de repositorios, no sé, se va, se va a hacer. Este botón es un componente,

00:11:21.470 --> 00:11:26.750
esto es un componente. Tal vez ellos juntan todos estos tres y es un componente. Todo lo,

00:11:26.750 --> 00:11:31.230
lo mínimo que debes hacer en una web es un componente bajo este esquema de estos frameworks

00:11:31.230 --> 00:11:38.810
de listas. Entonces, ese componente en nuestro caso, yo cree, creo que fueron dos,

00:11:38.930 --> 00:11:44.330
no me acuerdo bien. Ah, bueno, pues sí, qué bueno, lo podemos ver de hecho acá. Bueno,

00:11:44.370 --> 00:11:49.230
ahorita voy a empezar entonces ya a explicarte un poquito el proyecto, ¿no? Ahorita ya es

00:11:49.230 --> 00:11:56.230
la parte de la arquitectura y ya. Así, literal, ¿no? Lo que se ocupa. Hasta ahí tienes alguna

00:11:56.230 --> 00:12:03.790
pregunta. El objetivo del front es consumir el API, pasando la autenticación de token que se

00:12:03.790 --> 00:12:10.710
va en el login. Si es registro, no mando autenticación y pues lo vas a llegar. O sea,

00:12:10.730 --> 00:12:15.990
son tres formularios, ¿no? Tres vistas, tres pantallas, la de login, la de registro

00:12:17.590 --> 00:12:23.290
y la de cuando ya inició la sesión, eh, el crud de usuarios, ¿no? Que yo iba a llevar

00:12:23.290 --> 00:12:29.930
paginado y demás. Sí, este mecanismo para hacer logouts es un botón que está dentro de la,

00:12:29.930 --> 00:12:36.690
de esta tabla, de esta pestaña, dentro de esta pantalla de la de usuarios,

00:12:36.930 --> 00:12:43.670
¿no? Cuando ya inicié, este, ahí está. Entonces, esto se puede, sí, así son tres,

00:12:43.820 --> 00:12:51.200
tres, tres pantallas. Va. Luego de eso, ahí es lo de, lo que tú de hecho detectaste,

00:12:51.740 --> 00:12:58.400
que además de tener estas dos máquinas, vamos a hacer un llamador, vamos a hacer que de alguna

00:12:58.400 --> 00:13:03.720
forma la máquina WESPED, en este caso la del sistema operativo, en este caso mi Mac,

00:13:04.620 --> 00:13:10.380
es el consumidor tanto de la máquina 1 como de la máquina 2. Entonces, gracias a la

00:13:10.380 --> 00:13:16.860
virtual box, podemos, y bueno, la tecnología ahora sí que de redes, podemos hacer un puente.

00:13:17.840 --> 00:13:22.660
Basta con configurar y ahorita te digo que a la máquina virtual un bridge, un puente,

00:13:22.840 --> 00:13:28.720
un adaptador. Lo seteamos de esa forma y ya con eso las, todas las máquinas que estén

00:13:28.720 --> 00:13:33.420
accedidas a esa red, pues están comunicadas, digamos, por red. Entonces, yo ya le puedo hacer

00:13:33.420 --> 00:13:40.200
ping de entre una a otra y de entre estas a las dos. Y haciendo ese ping, lo único que hay

00:13:40.200 --> 00:13:45.560
que buscar es, lo único que hay que hacer es ese adaptor, ese puente, que no es más que elegirle

00:13:45.560 --> 00:13:51.300
en la configuración de la base una opción que dice conectarse a la red por medio de bridge

00:13:51.300 --> 00:13:59.100
adaptor. Ya nada más. Ya con eso creándolas, este, mientras compartan la misma red, ya van a

00:13:59.100 --> 00:14:05.660
poder pinguearse entre ellas. Y este, ya dicho eso, ya nada más falta saber las IPs,

00:14:05.660 --> 00:14:12.500
la IP de la máquina uno, la IP de la máquina dos y con eso ya podrías hacer desde una petición

00:14:12.500 --> 00:14:20.040
hacia ese servidor, desde mi local hacia esta o desde mi local hacia la del back o desde la del

00:14:20.040 --> 00:14:26.880
back hacia el front o desde el front hacia el back. O sea, eso es como funciona la parte

00:14:26.880 --> 00:14:35.440
de la comunicación entre ellas. Entonces, de esa forma yo ya podía consumirme el,

00:14:35.440 --> 00:14:42.140
conectarme al front y conectarme también al back por SSH. De hecho, creo que si nos conectamos

00:14:42.140 --> 00:14:52.440
por SSH al servidor y así sí SSH te conectabas, ya podrías acceder desde el local a la terminal

00:14:52.440 --> 00:14:58.320
de acá o la terminal de acá y pues ya este trabaja. Hasta ahí tienes alguna duda de la

00:14:58.320 --> 00:15:10.080
arquitectura. A ver, ok. Ok. Ok, ok. A ver, entonces vámonos por partes. De estas tres

00:15:10.080 --> 00:15:18.880
preguntas que tienes, la que podemos resolver ahorita a la mano es la de acá. Ok. Va,

00:15:19.160 --> 00:15:24.400
entonces de todas tus dudas las que podemos resolver ahorita así a la mano son la dos,

00:15:24.400 --> 00:15:31.200
que me la voy a llevar hasta abajo y la cuatro. Estas dos. Y estas dos te las explico cuando ya

00:15:31.200 --> 00:15:37.860
veamos los repositorios. Va, el código que ya sería como lo último. Entonces, ¿por qué usar

00:15:37.860 --> 00:15:48.000
Note en vez de Java, por ejemplo? Mira, la verdad no es que, a ver, cualquiera de las

00:15:50.700 --> 00:15:58.120
son robustas. Yo en lo personal confío más en la parte de Java para la parte de robustas,

00:15:58.160 --> 00:16:06.200
porque siempre nació siendo un framework de backend. Sí, sí, Java puede ser también este,

00:16:06.540 --> 00:16:12.600
bueno, no es que con Java, con el lenguaje Java, puedas hacer front-end, no, pero sí con el

00:16:12.870 --> 00:16:19.730
sistema de Spring, por ejemplo, con su framework puedes construir aplicaciones webs, ¿no? Que

00:16:19.730 --> 00:16:28.710
era como lo novedoso hace unos años, ¿no? Puedes hacer JCPs, puedes ocupar todo mediante un

00:16:28.710 --> 00:16:34.110
ecosistema de Spring, modelo vista controlador, demás. Podías hacer una aplicación también

00:16:34.110 --> 00:16:42.770
full stack, ¿sí? Modelo vista controlador es una, es una, es una, es un, es un patrón de,

00:16:42.970 --> 00:16:49.210
es un patrón de arquitectura, ¿sí? Es un patrón arquitectónico de diseño que te sirve para

00:16:49.210 --> 00:16:56.690
separar una aplicación web en precisamente eso que dices, ¿no? Tres, tres entidades que

00:16:56.690 --> 00:17:03.070
son modelos, vistas y controladores. Bueno, muy similar a lo que tienes ahí en Symphony,

00:17:03.070 --> 00:17:10.490
en Laravel, en KPHP, en Zen Framework. Todos esos frameworks ocupan MDC. Ajá, entonces,

00:17:11.310 --> 00:17:21.550
este, bueno, Java hace muy similar, lo mismo. Ahora, sí, sí es cierto que Java es, mira,

00:17:21.890 --> 00:17:27.290
bueno, es que no podemos decir que Java le gane a Node en robustez, porque la verdad es

00:17:27.290 --> 00:17:33.990
que también Node lo es. También Node es muy robusto. Node es más joven que Java, ¿sí? Pero,

00:17:34.410 --> 00:17:40.950
puta madre, güey. JavaScript es un, es un lenguaje que lleva años en la industria, ¿no?

00:17:41.230 --> 00:17:46.230
Al igual, yo creo que de edad se la lleva con Java. No sé quién sea más viejo de los dos,

00:17:46.570 --> 00:17:55.410
¿sí? Pero ambos tienen eso, pros y contras. Ajá. Este, realmente hablar de eso, yo creo

00:17:55.410 --> 00:18:01.410
que es algo más, este, fuera de, del foco de aquí, lo que sí te puedo decir nada más,

00:18:01.410 --> 00:18:08.650
digamos, que tú puedes presentarte y decirles la idea de, yo ocupé JavaScript o no, porque

00:18:10.030 --> 00:18:17.350
se conecta bastante bien con el tema de Nginx, ¿sí? Nginx es un server que lo puedes configurar

00:18:17.350 --> 00:18:22.370
con tres patadas en JavaScript. Es que, mira, va mucho de estilos, porque sí es cierto,

00:18:22.370 --> 00:18:28.730
también lo puedes configurar con Java, este, es independiente, y sí, también es bien rápido

00:18:28.730 --> 00:18:34.790
y bien fácil lo que tú quieras. Tiene, tiene que ver más como un estilo de desarrollo, ¿no? Si,

00:18:34.790 --> 00:18:39.970
si ocuparas, por ejemplo, Spring Framework, toda esta aplicación, depende de qué tanta

00:18:39.970 --> 00:18:45.170
experiencia tú tengas con el framework, lo puedes configurar más o menos rápido. Si

00:18:45.170 --> 00:18:50.550
ocupas, por otro lado, Spring Boot, ese sí también sale en putiza, ¿no? Y bien fáciles

00:18:50.550 --> 00:18:56.990
configuraciones, pero bueno, yo en mi caso me fui por JavaScript, porque digamos que es un

00:18:56.990 --> 00:19:03.230
ambiente que se lleva muy bien de la mano con Vue. Vue es un framework de front-end, no es que

00:19:03.230 --> 00:19:11.010
sea la, la única, el único motivo, vaya, que, ah, como Vue es JavaScript, pues uso el

00:19:11.010 --> 00:19:17.830
backend JavaScript, no, sino como porque este fue un ejercicio meramente, digamos,

00:19:17.830 --> 00:19:25.310
como decirlo, controlado para hacerlo en una entrevista de trabajo, pues se ocupó así algo rápido.

00:19:27.330 --> 00:19:32.770
Es que son todos, son tecnologías JavaScript, recuerda, recuerda aquí en esta parte,

00:19:34.190 --> 00:19:41.430
de el tema de los stacks, ¿no? Está Mongo Express, Angular, y no, que es el primero que

00:19:41.690 --> 00:19:50.350
yo, ¿no? Este fue como el boom. Después de min, empezó mer, y luego fue el mebon, y luego ya

00:19:50.350 --> 00:19:55.130
le meten tanta mamada que no sé qué, ¿no? Pero pues al final son Mongo Express, Vue y

00:19:55.130 --> 00:20:01.710
Node. Ya que te suena todo esto, o sea, ya, ¿no? Ya empiezas a hablar de, a este,

00:20:02.770 --> 00:20:07.830
pues muy, muy probablemente voy a usar el stack. Aquí, ¿qué pasa? Que no ocupamos Mongo,

00:20:07.830 --> 00:20:15.850
ocupamos una base de datos basada en SQL Server, perdón, basada en un modelo relacional. En este

00:20:15.850 --> 00:20:20.650
caso, pues fue MySQL, ¿no? Pues aquí creo que sí hay un stack que se llama así, algo así,

00:20:21.270 --> 00:20:28.190
algo así. Te digo que así las combinan, así mamadas, ¿no? O MySQL, algo así les empiezan a

00:20:28.190 --> 00:20:33.930
nombrar. Pero, bueno, es eso a lo que se refiere, ¿no? Yo, yo nada más lo mencionas así,

00:20:33.930 --> 00:20:42.630
o sea, fue puro, soy bastante ágil con Node, con Java, con cualquiera de los dos, pero,

00:20:42.870 --> 00:20:48.730
pues, bueno, ahora sí que lo quise hacer con esto por la simplicidad, la rapidez,

00:20:49.250 --> 00:20:53.530
que todo lo quise manejar en un solo lenguaje de programación, que en este caso es

00:20:53.530 --> 00:21:00.990
JavaScript, TypeScript. Entonces, este, para llevar una sintaxis, digamos, de código, ¿no?

00:21:00.990 --> 00:21:07.650
Nada más. Ajá, exactamente. Si tú te llevas por un framework basado en Apache, pues ya lo

00:21:07.650 --> 00:21:16.310
ocupas con este, con tecnología de Java, ¿no? Lo ocupas con algún, este, algún YAR que exportes

00:21:16.310 --> 00:21:21.750
con la aplicación de Java y todo este Apache también. O también está JVolk, Wildfly,

00:21:22.210 --> 00:21:28.970
hay un chingo de servers que manejan este Java. Ajá, o sea, es que te digo, son sabores,

00:21:28.970 --> 00:21:35.450
nada más. Hay muchas herramientas. Sí, es cierto, o sea, están muy dedicadas las herramientas a

00:21:36.070 --> 00:21:40.450
ciertas, este, características y demás, pero generalmente tiene que ver con,

00:21:41.950 --> 00:21:46.650
con lo que ocupas, con cuántos recursos tengas, etcétera, etcétera, etcétera, ¿no?

00:21:47.350 --> 00:21:52.750
Con qué tanto puedes delegar o estás dispuesto a delegar. Por ejemplo, esta arquitectura,

00:21:52.790 --> 00:21:57.530
y creo que va de la mano con la otra, este, lo pudimos haber hecho en la nube. Imagínate,

00:21:57.530 --> 00:22:03.890
tiene escenario real, lo haces en la nube, ¿no? Con servidores, este, dedicados de paga y demás.

00:22:04.550 --> 00:22:09.930
Hay gente que dice, yo no tengo pedo por la lana, yo lo voy a hacer, ¿no? Voy y me aviento

00:22:09.930 --> 00:22:15.670
a pinche Amazon, cuentas de Google, lo que tú quieras. Ya revisé los planes. Ah, lamenta,

00:22:15.670 --> 00:22:22.430
si me queda y me emigro al cloud computing, ¿no? Todo más rápido, todo en corto, entre

00:22:22.430 --> 00:22:28.490
comillas, y muy entre comillas 24-7, porque luego también se caen, esos güeyes también se caen,

00:22:28.550 --> 00:22:34.890
y pues ya chigaste tu madre. O sea, hay muchas pros y contras, ¿no? Pero, por ejemplo,

00:22:35.170 --> 00:22:41.170
ventajas que te trae la nube es que todos los pinches servidores ya no los administras tú,

00:22:41.290 --> 00:22:45.810
por eso estás pagándole a otra persona. Cabrones, ustedes me administran el cloud

00:22:45.810 --> 00:22:50.290
computing y demás. Bueno, es que el cloud computing se divide en categorías, güey. O sea,

00:22:50.290 --> 00:22:58.630
tú puedes decidir hasta qué capa de infraestructura trabajar. Puedes trabajar en una capa 100%

00:22:58.630 --> 00:23:03.830
serverless. ¿Qué quiere decir? Que ya no ocupas tú ni madres de infraestructura, ¿no? Tú ya nada

00:23:03.830 --> 00:23:10.230
más te puedes conectar a un producto de Amazon. Por ejemplo, Amazon ya tiene todo armado,

00:23:10.310 --> 00:23:15.190
por así decirlo. Ya dice, aquí yo tengo gateways, yo tengo servers, yo tengo pipelines

00:23:15.190 --> 00:23:21.290
para integración continua, repositorios de github, yo tengo funciones lambda,

00:23:21.530 --> 00:23:26.910
yo tengo funciones para almacenamiento, bases de datos, todo eso. Tú nada más consumelas, ¿no?

00:23:27.310 --> 00:23:31.890
Entonces ellos te arman su propia arquitectura. O sea, esto que tú armaste aquí, ellos ya está

00:23:31.890 --> 00:23:37.810
ya está armado, güey. Nada más para conectarte. Conectate a una base de datos. Conectate a

00:23:37.810 --> 00:23:43.930
una S3. Conectate a un despliegue. Este, hasta los IDES te los rentan. Ah, bueno,

00:23:43.930 --> 00:23:50.530
docker es otra cosa. Docker es, por ejemplo, docker lo que te permite hacer es empaquetar

00:23:51.110 --> 00:23:57.710
o contener contenedores precisamente. Bueno, cuando hablas de docker, casi casi vas a hablar

00:23:57.710 --> 00:24:03.250
de docker compose también. Son dos tecnologías. Entonces docker, el concepto de docker es

00:24:03.250 --> 00:24:09.950
la contenerización de aplicaciones para su mejor gestión y su mejor distribución en red.

00:24:09.950 --> 00:24:15.930
¿A qué me refiero? Vamos a suponer docker es una cajita. Es como si tuvieras aquí

00:24:15.930 --> 00:24:24.030
una cajita que se llame aplicación 1. ¿Sí? Y vas a, puedes tener otra cajita. Bueno,

00:24:24.110 --> 00:24:28.610
la vamos a poner acá abajo. Imagínalo con un modelo de cajas, ¿no? Aquí tienes

00:24:28.610 --> 00:24:33.630
otra aplicación 2. Entonces dentro de esta aplicación 1, tú vas a poder definir

00:24:34.290 --> 00:24:41.110
dentro de cada service, vamos a suponer que le llamas un nombre, ¿no? Le puedes decir,

00:24:41.310 --> 00:24:51.050
vamos a suponer MySQL, le vas a llamar, a este service le vas a llamar, no sé, frontend,

00:24:51.350 --> 00:24:59.350
en este caso, ¿no? Entonces vas a instalarle Vue, vas a instalarle, ¿qué más? NPM,

00:24:59.350 --> 00:25:04.450
le vas a instalar, pues, no sé si se instala en beautify por acá, no creo,

00:25:04.970 --> 00:25:07.870
más bien se instala dentro de esto, vas a instalarle Ubuntu Server,

00:25:09.350 --> 00:25:18.290
dentro de Ubuntu Server puertos, proxys, la chingada y media, ¿no? Esto. Y en el

00:25:18.290 --> 00:25:28.710
otro service vas a crear, por ejemplo, puedes hacer varios services en una sola

00:25:28.710 --> 00:25:33.630
aplicación, aquí puedes hacer, por ejemplo, la del backend, ¿sí? Aquí puedes instalar

00:25:33.630 --> 00:25:42.770
Node, Express, por ejemplo, y lo mismo. Entonces puedes tenerlo así en una sola

00:25:42.770 --> 00:25:46.890
aplicación, en un solo contenedor, este es el contenedor, puedes tener varios

00:25:46.890 --> 00:25:51.950
servicios, en este caso el front, en el back, ¿sí? Y cada uno tiene un ambientado,

00:25:52.630 --> 00:25:58.010
ese ambientado es pues todo esto que tú estás instalando acá, ¿sí? Todo esto,

00:25:58.010 --> 00:26:03.670
todo esto, todo esto lo compone, lo arma a través de, o es posible hacerlo

00:26:03.670 --> 00:26:10.970
porque se conecta a esta madre, Docker se conecta a una algo así como a un,

00:26:10.970 --> 00:26:22.130
a un, a un, a un GitHub, un repositorio central de imágenes, es como si

00:26:22.130 --> 00:26:29.830
maven, por ejemplo, ¿no? No sé si has escuchado de maven, de nougat, en en este en en en

00:26:29.830 --> 00:26:37.090
punto net. ¿Cómo se llama el gestor de paquetes de php? Este, no me acuerdo. Se me fue su

00:26:37.090 --> 00:26:46.670
pinche nombre del herramienta esta de comandos. Bueno, el gestor de paquetes. NPM o NBM, un

00:26:46.670 --> 00:26:54.310
chingo de estos, ¿no? Bueno, esto básicamente es eso. Docker tiene un repositorio central

00:26:54.310 --> 00:26:59.630
de imágenes, imágenes que son públicas, ¿sí? Entonces, ¿qué quiere decir eso?

00:27:00.130 --> 00:27:06.610
Que hay empresas, sobre todo las que son de software libre, o frameworks, tipo Vue,

00:27:06.610 --> 00:27:14.950
tipo, no, este, ¿cómo se llama esta madre? No, aquí también podrías tener. Todo esto

00:27:14.950 --> 00:27:22.710
y lo vas a poder, este, contener, por así decirlo, en en contenedores. Esto es Docker.

00:27:23.310 --> 00:27:30.090
Entonces, Docker, ¿qué hace? Docker te permite hacer un concepto. Ahorita te lo explico

00:27:30.240 --> 00:27:37.160
rápido como si fuera una máquina virtual. Todo esto va a correr gracias a que tú tienes

00:27:37.160 --> 00:27:42.840
instalado, ahorita esta la podemos quitar, a que a que tú tienes instalado tu ambiente

00:27:42.840 --> 00:27:48.120
de Docker, ¿no? Entonces, mientras tú tengas Docker instalado, esta madre tú la vas a

00:27:48.120 --> 00:27:51.840
poder ejecutar. ¿Por qué? Porque Docker también te provee de un CLI, ¿no? Una

00:27:51.840 --> 00:27:56.140
línea de comandos. Entonces, tú con eso vas a poder acceder y ver cómo está

00:27:56.140 --> 00:28:02.380
tu pinche contenedor, ¿sí? Vas a poder hacer comandos como, a ver, díglitame todas las,

00:28:02.540 --> 00:28:09.660
dime las imágenes que tengo, dime su status, ¿no? Reiniciame la imagen que se llame frontend,

00:28:09.800 --> 00:28:15.140
reiniciame la XM backend. Docker lo que hace es eso. Entonces, esto es una cajita.

00:28:15.760 --> 00:28:20.440
Esto es una cajita, cada service. Esto es otra cajita. ¿A qué me refiero con

00:28:20.440 --> 00:28:25.420
cajitas? Bueno, Docker internamente lo que hace es, esto se lo lleva y te crea,

00:28:25.420 --> 00:28:31.400
vamos a decirlo algo así como un, bueno, no es como un, sí, es un sistema operativo

00:28:31.400 --> 00:28:37.580
chiquito, por así decirlo. Lo empaqueta en un sistema operativo, generalmente basado

00:28:37.580 --> 00:28:42.200
en Unix, ¿no? Por ejemplo, te puede generar un fedora. Creo que eso también se puede

00:28:42.200 --> 00:28:47.740
configurar, pero por default creo que te lo mete en un fedora. Entonces, esos contenedores,

00:28:47.980 --> 00:28:52.260
a eso me refiero, todo esto te lo instala en un fedora y al final a ti te da una

00:28:52.260 --> 00:28:57.520
línea de comando. Entonces, tú vas a poder hacer algo como para, no me acuerdo cuál es el comando,

00:28:57.820 --> 00:29:04.240
pero el chiste es que le pones el nombre de tu imagen, diagonal, OPT, diagonal, algo.

00:29:05.060 --> 00:29:10.300
Y ya. Con esto, tú ya te conectas desde tu línea de comando a lo que tienes aquí

00:29:10.300 --> 00:29:15.840
adentro, a este servicio, a este contenedor. Y es como si tuvieras tu máquina virtual. Ya

00:29:15.840 --> 00:29:20.580
en este punto tú ya puedes interactuar con los comandos que tienes aquí en el front, ¿no?

00:29:20.580 --> 00:29:28.200
Y ya puedes empaquetar la aplicación, jugar con Vue. Como si tuvieras acceso a la máquina

00:29:28.200 --> 00:29:34.860
que hoy te hicimos, a la virtual por SSH. Ya te conectaste a esta instancia de front-end.

00:29:35.300 --> 00:29:39.740
Y esto la verdad es que lo contiene y lo hace en minutos, güey. O sea, yo le doy,

00:29:40.680 --> 00:29:50.480
no me acuerdo cuál. Ah, sí, ya me acordé. Docker Compose Op, ¿no? Compose Op. Y ya con eso.

00:29:50.580 --> 00:29:56.400
Esto de aquí que yo te estoy explicando es un archivo en un formato YAML. Entonces se llama

00:29:57.760 --> 00:30:04.180
Docker Compose Punto YAML, ¿va? Entonces tú cuando tengas este archivo te metes a la ruta,

00:30:04.240 --> 00:30:09.240
vamos a suponer que lo guardaste en descargas, diagonal, y ahí pones tu compose. Te metes

00:30:09.240 --> 00:30:16.740
desde tu línea de comandos, ejecutas este pinche comandito de acá, ahí. Este pinche

00:30:16.760 --> 00:30:22.780
comando de acá. Lo metes aquí adentro y pum. Solito esta madre empieza a leer todo

00:30:22.780 --> 00:30:27.560
este YAML y empieza a decir, ah, OK, este güey quiere empaquetar dos servicios. En

00:30:27.560 --> 00:30:31.700
el primero me estás pidiendo que te instale todo esto, va. En el segundo todo esto.

00:30:31.800 --> 00:30:35.460
Ya la terminal te va diciendo, estoy instalando esto, esto, esto, esto, pum,

00:30:35.460 --> 00:30:40.700
pum, pum, la, la, la. Listo, ya acabé. Ya cuando haya acabado, ya. Tú ya puedes

00:30:41.240 --> 00:30:45.800
monitorear las instancias. O sea, ya te lo trepó como si fueran servidores, ¿no?

00:30:46.760 --> 00:30:48.280
Y ya. Ese es el concepto de Docker.

00:30:50.200 --> 00:30:55.520
¿Qué significa que entras en el concepto también de la portabilidad, no? Tú vete,

00:30:55.720 --> 00:31:00.360
esto lo instalé en una Mac. Pero vete a Windows. Tú quieres correr la misma

00:31:00.360 --> 00:31:04.840
aplicación, ¿no? Sí. Ah, pues qué haces. Vete a Windows y instalate Docker.

00:31:05.480 --> 00:31:08.400
Sí, ahí tienes una interfaz gráfica que se llama Docker Desktop.

00:31:10.000 --> 00:31:19.260
Y ya. Con eso, te paso mi YAML. Mi Compose. Aquí está. Lo pongo. Igual,

00:31:19.280 --> 00:31:23.720
mismo comando, pum, y ya quedó. Y ya tengo la aplicación en un Windows,

00:31:23.840 --> 00:31:29.680
en un Mac, en un Linux, en un servidor que va a exponer esto, ¿no? Para que

00:31:29.680 --> 00:31:38.220
esté disponible en una nube. Y ya está mi despliegue, güey. No,

00:31:38.220 --> 00:31:42.160
yo también era, a mí también me tocó, bueno, yo también llevo ya 11 años en

00:31:42.160 --> 00:31:47.040
esto. A mí me tocó también cuando este pedo era de que había un webmaster y se

00:31:47.040 --> 00:31:52.440
instalaba un pinche server, un Tomcat, un IIS y la madre de esas en un

00:31:52.440 --> 00:31:57.180
servidor, la convertía con Firewolf, le metía Proxyx, la chingada,

00:31:57.200 --> 00:32:02.660
lo exponía al server, a internet, habilitaba puertos, cuidaba a otros y la

00:32:02.660 --> 00:32:06.660
madre y media, ¿no? Muy tedioso el proceso, pues, sobre un servidor

00:32:06.660 --> 00:32:12.040
físico. Yo también trabajé en empresas donde tenía sus, este, sus rats de

00:32:12.040 --> 00:32:16.540
servidores y todo ese peor. Ahorita ya la mayoría se está migrando, bueno, no

00:32:16.540 --> 00:32:21.240
todos, pero si una gran mayoría, pues ya ocupan más bien una iniciativa en

00:32:21.240 --> 00:32:25.960
la nube, güey, ¿no? Ya le pagan a pinche Amazon, a Google, ya depende de

00:32:25.960 --> 00:32:33.540
su proveedor, el que les guste, este, ya, eso se lo delegan a esa gente, ¿no?

00:32:36.180 --> 00:32:43.140
Y realmente la nube no es que sea pinche tecnología 100% en la nube, güey, al

00:32:43.140 --> 00:32:46.720
final esa pinche nube, toda la tecnología que tienen al final también

00:32:46.720 --> 00:32:50.980
son servidores, güey. O sea, lo único que pasaste es de que tus

00:32:50.980 --> 00:32:55.720
aplicaciones no las guardas en tus servidores tú físicos, sino que se

00:32:55.720 --> 00:32:59.380
los dejas a los servidores físicos de Amazon. ¿Qué haces que si los

00:32:59.380 --> 00:33:03.200
quieres, mientras más públicos, más privados los quieras, pues te van a

00:33:03.200 --> 00:33:06.140
ayudar a asegurar más, pero ¿qué significa? Que básicamente esos güey

00:33:06.140 --> 00:33:10.160
compran los servidores que tú antes comprabas, los ponen en una pinche

00:33:10.160 --> 00:33:14.360
cuarto donde les dan un mantenimiento especial, gente dedicada a cuidar tu

00:33:14.360 --> 00:33:18.260
servidor, ¿no? Eso es lo que compras, es lo que te venden el cloud computer.

00:33:19.160 --> 00:33:22.300
Eso, ese es el concepto. Pero al final es lo mismo.

00:33:23.580 --> 00:33:26.440
Y pues ahora imagínate la potencia que tienen esos pinches servidores,

00:33:26.540 --> 00:33:29.840
¿no? Estos cabrones, pues tienen gente que les sabe a ese pedo del

00:33:29.840 --> 00:33:33.840
escalamiento horizontal, vertical. Puro pinche cabrón, güey.

00:33:34.000 --> 00:33:37.840
¿Qué hacen esto? Que funcione. Tú ya no te preocupas por escalar la

00:33:38.440 --> 00:33:41.860
aplicación. O sea, sí te vas a preocupar, pero ya del lado del desarrollo.

00:33:42.340 --> 00:33:45.900
Ya por el tema de la infraestructura, de que le metes más memoria, de que

00:33:45.900 --> 00:33:49.880
habilítale esto, que la chimera, que haz la depuración del log porque no, ya

00:33:49.880 --> 00:33:53.280
todo eso lo hace la pinche nube, ¿no? Eso es la tecnolada.

00:33:53.380 --> 00:33:57.740
Opción uno, opción dos, opción tres. Entonces, tu ejercicio era

00:33:57.740 --> 00:34:02.060
un ejemplo más como, es una entrevista ya, ¿no? Que se note que

00:34:02.060 --> 00:34:05.680
sabes todo esto, pero pues al final tú ocupaste esto porque te lo pidieron así

00:34:05.680 --> 00:34:09.840
en máquinas virtuales. Y la, lo más liviano que, o sea, también

00:34:09.840 --> 00:34:14.220
lo puedes decir así, ¿no? Por recursos. La neta es que Node es más liviano que,

00:34:14.220 --> 00:34:17.980
que Java, ¿no? Java sí te va a pedir más, más recurso.

00:34:18.080 --> 00:34:21.940
Java es más exquisito. Y por este

00:34:21.940 --> 00:34:25.700
lado Node es más rela, ¿no? Más rápido, más, más

00:34:25.700 --> 00:34:29.780
livianado. Engine X se instalaron en putiza, güey, en mi

00:34:29.780 --> 00:34:33.140
máquina, ¿no? Y ya. Ese es el, ese es el pedo de las,

00:34:34.220 --> 00:34:37.480
de las aplicaciones, ¿sale? Entonces ya te respondí por qué se usa Node

00:34:37.480 --> 00:34:41.620
y de qué otra forma se pueden armar las arquitecturas. ¿Sí, más o menos? ¿Te quedó claro? Va.

00:34:42.280 --> 00:34:46.120
Entonces ya para irle cerrando, vamos a ver qué pedo ya con las aplicaciones.

00:34:46.660 --> 00:34:49.920
Le pongo foco a lo de los tokens y las versiones de Vue, qué pedo

00:34:49.920 --> 00:34:53.720
con lo de MVC y demás. Este, pero no, realmente Vue ya no es

00:34:54.280 --> 00:34:57.900
MVC, ¿no? Ya, ya no es MVC, ya es otra, otra

00:34:57.900 --> 00:35:01.800
tecnología que pues te digo. Es que no, de hecho hasta donde

00:35:01.800 --> 00:35:05.140
yo me quedé, yo te digo del modelo Angular,

00:35:06.020 --> 00:35:09.660
ya no tienen un patrón, güey. O sea, ya, ya no

00:35:09.660 --> 00:35:13.180
me acuerdo cómo se llaman. Se, se puede decir que son

00:35:13.700 --> 00:35:17.860
arquitecturas basadas en componentes. O sea, lo que ocupan son componentes,

00:35:17.900 --> 00:35:21.700
¿no? Este, pero como traen un patrón

00:35:21.700 --> 00:35:25.740
tipo MVC, o sea, ya, ya no son, son aplicaciones que

00:35:25.740 --> 00:35:29.140
más bien sirven para hacer SPS, ¿no? Single Precious Applications.

00:35:29.640 --> 00:35:33.440
SPS. Pero no, no, no, no vas a encontrar un modelo,

00:35:33.560 --> 00:35:37.660
una vista, un controller, no, no, no. Digo, lo puedes manejar

00:35:37.660 --> 00:35:39.320
pero pues no es la idea, framework.

00:35:43.560 --> 00:35:45.260
Está diseñado para otra cosa.

00:35:46.620 --> 00:35:47.980
No para, no para eso.

00:35:49.760 --> 00:35:52.260
¿Sale? Este, pues bueno, a ver. Entonces,

00:35:52.500 --> 00:35:55.400
la siguiente página, yo te doy una chuleta

00:35:56.580 --> 00:35:59.980
de comandos. Aquí tienes el backend. Entonces, el backend

00:36:01.680 --> 00:36:03.900
eh, así ejecutas la aplicación, ¿no?

00:36:04.020 --> 00:36:08.160
Con, no, la, la, la. Aquí tienes la IP, haces el ping.

00:36:08.880 --> 00:36:12.160
Eh, Telnet para hacer pruebas de entre tu host local y la

00:36:12.160 --> 00:36:15.200
conexión al, al puerto, ah, bueno,

00:36:16.080 --> 00:36:20.600
a la máquina, ¿no? A lo aquel. Ahorita vamos a ver esto de los puertos porque

00:36:20.600 --> 00:36:24.420
hablando, hablar de los puertos son dos requisitos fundamentales.

00:36:24.520 --> 00:36:29.200
Uno es el firewall y otro es la directiva de

00:36:29.780 --> 00:36:31.200
eh, como se le puede decir,

00:36:32.600 --> 00:36:35.160
de restricción de puertos, los

00:36:35.160 --> 00:36:39.660
allows. Solamente permitas la entrada a través de estos puertos

00:36:39.660 --> 00:36:43.780
hacia tu server del 22 y del 80 y el proxy te va a ayudar a hacer la

00:36:43.780 --> 00:36:48.160
redirección, ¿va? Entonces, esos son, esos, esas dos cosas son las que

00:36:48.160 --> 00:36:51.920
en cuestión de configuración al, en el enginex

00:36:51.920 --> 00:36:55.840
se tenían que hacer, ¿no? Una cosa es la este

00:36:55.840 --> 00:36:59.900
eh, bueno, enginex te va a permitir para agregarle una regla que es un firewall,

00:37:00.300 --> 00:37:03.740
un firewall inverso y ese firewall lo único que hace es

00:37:03.740 --> 00:37:07.960
este redireccionar desde un servidor hacia un puerto

00:37:07.960 --> 00:37:11.060
eh, 3000 o 30, no me acuerdo que puerto quería.

00:37:11.060 --> 00:37:15.520
Sí, y ya. Y lo otro se hace del lado del sistema operativo,

00:37:15.880 --> 00:37:19.580
lo del, lo de las reglas de restricción de puertos,

00:37:19.820 --> 00:37:22.980
se puede decir así, restricción de puertos, ¿sale? Entonces,

00:37:23.580 --> 00:37:27.080
aquí, por ejemplo, este comando en el map nos permite

00:37:27.080 --> 00:37:30.860
ver todos los puertos activos en tu host, ¿no? Y ahí vas.

00:37:31.320 --> 00:37:34.740
Después de que nosotros hiciéramos el tema de la restricción de puertos,

00:37:35.060 --> 00:37:39.140
esperas que este comando te devuelva nada más los puertos en donde

00:37:39.140 --> 00:37:42.980
puede acceder a los que se le puede comunicar desde fuera, pues,

00:37:42.980 --> 00:37:47.360
¿no? Los que están expuestos. Entonces, aquí está lo del restricción

00:37:47.360 --> 00:37:51.000
de puertos, es una configuración a nivel del servidor, esto se hace en el backend.

00:37:52.480 --> 00:37:55.500
Eh, para eso tú ocupaste una tecnología que se llama

00:37:56.760 --> 00:37:59.080
UFW propia de Ubuntu Server.

00:37:59.800 --> 00:38:02.620
Sí, esto quiere decir que se llama un complicated firewall.

00:38:03.360 --> 00:38:07.160
Entonces, con este complicated firewall cuyo comando es el

00:38:07.160 --> 00:38:11.120
UFW, lo que hace es que te permite restringir

00:38:11.120 --> 00:38:15.200
o crear reglas para que tú le digas desde qué puertos solamente quieres

00:38:15.200 --> 00:38:19.200
que estén habilitados. En este caso, la magia es

00:38:19.200 --> 00:38:23.140
este, los allows que te decía. La conexión de

00:38:23.140 --> 00:38:26.940
a un puerto en tu servidor es esto. Tú le dices

00:38:26.940 --> 00:38:31.220
la regla, permíteme el 22 o hábilítame el 80,

00:38:31.380 --> 00:38:34.820
es lo que te quiere decir. Esto hace que

00:38:34.820 --> 00:38:39.160
el servidor por default solamente escuche conexiones entrantes desde el puerto HTTP

00:38:39.160 --> 00:38:43.120
hacia esto y ya, hacia el 22 y al 80.

00:38:44.340 --> 00:38:46.900
Esta otra regla, por ejemplo, niega el access,

00:38:47.060 --> 00:38:51.080
o sea, si yo quisiera tapar el 22, ya nada más le meto esto, ya ni por ahí entra,

00:38:51.360 --> 00:38:55.140
¿no? Y este comando me permite eliminar

00:38:55.140 --> 00:38:59.020
todas las reglas. Entonces, este paquete, un complicated firewall,

00:38:59.460 --> 00:39:02.820
es más que nada un paquete de Ubuntu Server y sirve para

00:39:03.800 --> 00:39:07.080
restringir puertos. Por eso tengo que esta chuleta también

00:39:07.080 --> 00:39:11.380
hay mucha información. Luego, el tema del proxy inverso

00:39:11.380 --> 00:39:15.260
que te decía, son dos cosas, hablar de puertos, restringirlos

00:39:15.260 --> 00:39:19.180
y ahora el proxy inverso. El proxy inverso, lo que te va a permitir

00:39:19.180 --> 00:39:23.140
hacer es una redirección. Yo le estoy diciendo, por un lado, que solamente

00:39:23.140 --> 00:39:27.240
desde el 22 y del 80 deje acceder a las comunicaciones

00:39:27.240 --> 00:39:31.480
desde fuera, ¿sí? Pero entonces, la máquina

00:39:31.480 --> 00:39:35.300
de aplicación, digamos, las aplicaciones manejan un puerto por

00:39:35.300 --> 00:39:39.420
default para trabajar. Por ejemplo, si yo instalo Node

00:39:39.420 --> 00:39:43.600
o Express, generalmente manejan el puerto 3000. Entonces,

00:39:44.100 --> 00:39:47.580
si yo quiero exponer un API y me estás diciendo

00:39:47.580 --> 00:39:51.040
que yo tengo nada más la opción de habilitar el 22 y el 80,

00:39:51.400 --> 00:39:54.320
pero mi servidor ocupa el puerto 3000,

00:39:55.440 --> 00:39:59.080
ahí en tu desarrollo, o sea, si a mí me hubieras dicho

00:39:59.080 --> 00:40:02.600
que ese requerimiento, yo me meto a la configuración del servidor

00:40:02.600 --> 00:40:06.520
del lado de Node y le digo, ah, pues no corras en la aplicación en el puerto 3000,

00:40:07.060 --> 00:40:11.000
córrele en el puerto 22 o en el 80 y ya, ¿no? Es el que está expuesto.

00:40:11.440 --> 00:40:14.960
Pero aquí a ti lo que te pedían específicamente era crear

00:40:14.960 --> 00:40:18.120
un proxy inverso para hacer una redirección.

00:40:19.240 --> 00:40:23.260
Casi, casi te dijeron, no quiero que le muevas ni madres al puerto del aplicativo

00:40:23.260 --> 00:40:27.300
de Node, déjamelo en el puerto 3000. Lo que quiero que tú hagas

00:40:27.300 --> 00:40:31.520
es, esto lo hacen solo para que vean que tienes

00:40:31.520 --> 00:40:35.540
dominio sobre esto. Entonces, ¿qué es lo que te pedían ellos crear un proxy?

00:40:35.660 --> 00:40:39.740
Proxy inverso para que la redirección

00:40:39.740 --> 00:40:43.520
exista desde el puerto 80 y me la mapes al puerto

00:40:43.520 --> 00:40:46.520
donde la aplicación corre. Entonces,

00:40:47.240 --> 00:40:51.800
de esa forma, yo me meto aquí a un archivo de configuración

00:40:51.800 --> 00:40:55.240
que yo creo que se llama backend.conf y

00:40:55.240 --> 00:40:59.040
lo creo aquí en esta ruta de NGINX. Por eso te decía,

00:40:59.540 --> 00:41:02.600
tú para este caso ya debes de tener NGINX instalado.

00:41:03.220 --> 00:41:07.100
NGINX en este caso lo único que nos ayuda es para hacer

00:41:07.100 --> 00:41:11.240
la redirección del proxy inverso. Entonces, tú metes

00:41:11.240 --> 00:41:15.240
aquí NGINX, lo metes en esta ruta, en NTC

00:41:15.240 --> 00:41:18.880
NGINX está instalado, en Cypher Viable, ahí

00:41:18.880 --> 00:41:23.080
va a guardar todos los sitios disponibles, lo va a guardar en configuración global a todos

00:41:23.080 --> 00:41:26.740
sus servidores y va a aplicar las reglas de backend.conf.

00:41:27.480 --> 00:41:31.360
Sí, este archivo backend.conf es esto. Básicamente

00:41:31.360 --> 00:41:34.960
es un JSON, sí, es un archivo de propiedades.

00:41:35.200 --> 00:41:39.120
Se llama conf, es un config, es un .conf y lo que hace es definir

00:41:39.120 --> 00:41:43.200
su proxy inverso, hace esto. Le dices escucharlo, lo que escuchas

00:41:43.200 --> 00:41:47.060
en el 80, sí, esta es la

00:41:47.060 --> 00:41:50.800
IP del pinche server de backend, si te fijas.

00:41:52.640 --> 00:41:55.280
155, aquí está, es mi conexión

00:41:56.180 --> 00:41:58.920
digamos local, mi IP.

00:42:00.340 --> 00:42:02.760
Entonces, localmente el servidor se llama así.

00:42:04.140 --> 00:42:06.520
Ajá, con esa IP, o sea, su IP local.

00:42:06.960 --> 00:42:10.460
Y ya lo único que hace es eso, o sea, estas redes son reglas no sé qué.

00:42:10.500 --> 00:42:14.720
Que haga esta pendejada, ya. Pero lo que hace es eso, o sea, todo lo que escuches

00:42:14.720 --> 00:42:18.460
del puerto 80, redirígemelo al puerto local host 3000.

00:42:18.460 --> 00:42:22.500
Entonces, cuando una persona le pegue al API desde

00:42:22.500 --> 00:42:26.300
el 80, ajá, lo que va a hacer internamente es va a entrar

00:42:26.300 --> 00:42:30.860
va a cachar la regla del proxy, va a decir, ok, alguien intentó conectarse

00:42:30.860 --> 00:42:34.460
a tu IP desde el puerto 80, me vale mal, es que pinche

00:42:36.200 --> 00:42:38.100
ruta o paths tengas después.

00:42:38.640 --> 00:42:42.460
Pero yo entiendo que eso lo tengo que redireccionar localmente

00:42:43.420 --> 00:42:46.020
a donde se esté ejecutando el puerto 3000.

00:42:46.020 --> 00:42:50.340
Y como tú localmente dejas la instancia en este servidor

00:42:50.340 --> 00:42:54.180
de la aplicación Backend en ese puerto, ahí es donde ocurre

00:42:54.180 --> 00:42:57.880
la redirección. Todo lo que llegue a ese puerto 80, llega

00:42:57.880 --> 00:43:01.720
directamente a la máquina Backend local host 3000.

00:43:02.100 --> 00:43:05.360
O sea, a tu aplicación express.

00:43:05.840 --> 00:43:09.740
Y así se conecta. Ahí ya le llega la petición, pues ya.

00:43:09.740 --> 00:43:13.740
Empieza a trabajar. Otra de las cosas que ocupas para lo del proxy

00:43:13.740 --> 00:43:16.920
inversos, que es un enlace simbólico, ahí te dice cómo hacerlo.

00:43:17.060 --> 00:43:21.520
Básicamente vamos a agregar esto a un enlace para que lo

00:43:21.520 --> 00:43:25.420
pueda habilitar y haga eso, que cuando llegue la petición

00:43:25.420 --> 00:43:29.340
lo primerito que pase es la validación por Nginx.

00:43:29.720 --> 00:43:33.640
Para eso es el enlace simbólico. Reinicias Nginx para que

00:43:33.640 --> 00:43:37.920
cache la configuración y ya. Aquí está el proxy inverso.

00:43:38.260 --> 00:43:41.140
Le haces una prueba, aquí por default le está agarrando el puerto 80.

00:43:41.140 --> 00:43:44.640
Si yo no lo pongo, el default es el 8080.

00:43:45.020 --> 00:43:49.040
O abreviado 80. Entonces yo le pego al 80 y ya

00:43:49.040 --> 00:43:53.060
directamente yo hacer esto, está pegándole internamente

00:43:53.060 --> 00:43:56.380
a la URL, a la IP local host.

00:43:57.560 --> 00:44:00.960
Entonces yo tengo que tener habilitado el servidor para que conteste,

00:44:01.120 --> 00:44:03.260
sino que no acaba de contestar.

00:44:05.180 --> 00:44:09.080
Luego SSH es la tecnología que ocupas desde tu máquina local,

00:44:09.080 --> 00:44:12.500
o sea, en este caso mi Mac, para conectarte al Bakken.

00:44:13.040 --> 00:44:17.240
Entonces yo así llamé a la máquina Bakken, Giovanni Valvel,

00:44:17.500 --> 00:44:21.220
sale y este, no es cierto, perdóname, se llama, la máquina se llama

00:44:22.160 --> 00:44:25.200
Bakken, creo, Bakken Server, no me acuerdo, ahí decía

00:44:25.200 --> 00:44:28.220
el nombre. Pero bueno, este es el nombre del usuario más bien.

00:44:29.000 --> 00:44:32.200
Usuario, Giovanni Valvel, a la IP tal.

00:44:32.980 --> 00:44:36.040
Ya, me conecto por SSH y ya está.

00:44:36.040 --> 00:44:40.200
Esta es la forma de conectarme al Frontend, al Bakken, sus IPs

00:44:40.200 --> 00:44:43.360
diferentes, reiniciado de servicios,

00:44:44.280 --> 00:44:47.500
es de la máquina virtual, el sistema TTL.

00:44:47.740 --> 00:44:52.040
Este creo que es el service, enginx, aquí reiniciones enginx.

00:44:53.380 --> 00:44:55.160
Y ya, MySQL

00:44:56.040 --> 00:44:58.260
se instala con un paquete,

00:45:01.140 --> 00:45:04.040
esta variable básicamente es

00:45:04.040 --> 00:45:08.140
para que puedas hacer transacciones seguras,

00:45:08.320 --> 00:45:12.020
es como de las cosas que recomiendas cuando haces la instalación,

00:45:12.300 --> 00:45:16.140
todo ese perro, ¿sale? Accedes a MySQL a través de esta

00:45:16.140 --> 00:45:19.420
ruta, sudo MySQL menos su root menos p,

00:45:19.860 --> 00:45:23.500
y accedes a la instancia de base de datos, con el usuario root.

00:45:24.760 --> 00:45:27.980
Y este, que más, asignas un password,

00:45:28.780 --> 00:45:31.600
le decimos, este root, lo calcos,

00:45:35.840 --> 00:45:38.500
le pongo el password a la base de datos,

00:45:39.020 --> 00:45:42.520
para que me pueda conectar cuando haga la colección desde el bak a la base,

00:45:43.520 --> 00:45:46.700
y la pueda agregar. Le doy privilegios y ya,

00:45:46.840 --> 00:45:49.060
creamos la base de datos, la llame yagw,

00:45:49.840 --> 00:45:53.080
y la tabla, que te pedían ahí un modelo de base de datos,

00:45:53.240 --> 00:45:56.360
el crud, vaya, sobre el modelo donde quieres el crud,

00:45:56.600 --> 00:45:59.580
ahí lo creen una base de datos llamado yagw,

00:46:01.300 --> 00:46:03.500
la tabla, no te la especifican,

00:46:03.560 --> 00:46:07.380
pues tú la defines, un modelo chiquito, un id, nombre,

00:46:07.480 --> 00:46:11.740
email y password, ya, el password para que se encrypte con el bak,

00:46:13.320 --> 00:46:15.660
la contraseg, el incremental del

00:46:15.660 --> 00:46:18.580
identificador, y listo, con eso.

00:46:20.500 --> 00:46:23.520
Insertar en la tabla desde el endpoint para que se encrypten las passwords.

00:46:25.340 --> 00:46:27.720
Ah, pues creo que entonces sí venían tu requerimiento,

00:46:27.720 --> 00:46:31.560
no les pagó nada, bueno, entonces no fue un

00:46:32.380 --> 00:46:34.600
plus, sino fue un requerimiento.

00:46:35.300 --> 00:46:38.280
Ah, ¿no venían? Ah, pues entonces ya lo pones como un plus.

00:46:40.080 --> 00:46:43.300
Y ya, front end, respecto al front,

00:46:43.480 --> 00:46:47.660
igual tienes la máquina virtual, en este caso la 55 es el bak,

00:46:47.680 --> 00:46:51.700
la 56 es el front, tienes tus frameworks de vista,

00:46:52.140 --> 00:46:55.280
en este caso es view, así lo instalas,

00:46:55.280 --> 00:46:59.200
a nivel global, obviamente necesitas NPM, instalas beautify,

00:46:59.320 --> 00:47:03.640
que te digo que es como si fuera el material, si, agregas beautify

00:47:03.640 --> 00:47:07.040
en el asistente, que es la opción 3,

00:47:07.540 --> 00:47:11.200
y con eso esto adentra en tu proyecto, ya, la versión

00:47:11.200 --> 00:47:14.960
es la más actual, si te fijas yo en view, no le dije una versión,

00:47:15.460 --> 00:47:19.240
cuando no especificas una versión, NPM se va por la versión más actual,

00:47:19.800 --> 00:47:23.260
la más estable de view, entonces aquí eso lo maneja, lo único

00:47:23.260 --> 00:47:26.380
que te digo es la más actual, ¿cuál? No me acuerdo, creo que es la 2,

00:47:26.600 --> 00:47:31.000
o la 3, no me acuerdo, con esto checas la versión de view,

00:47:31.180 --> 00:47:35.200
y con esto ejecutas la aplicación una vez que esté activa, ¿va?

00:47:35.260 --> 00:47:38.660
Es eso. Y comandos muy en común,

00:47:40.180 --> 00:47:43.140
NBM, que es como el gestor de NPM,

00:47:44.860 --> 00:47:46.740
NBM sirve porque

00:47:46.740 --> 00:47:51.080
por default si tú instalas NPM, NPM solamente te deja tener

00:47:51.080 --> 00:47:54.940
una instancia de NPM en tu máquina, si tú instalas

00:47:54.940 --> 00:47:58.800
NPM 5, bueno, 2, ya te chigaste,

00:47:59.240 --> 00:48:03.100
quieres meter una nueva versión, tienes que actualizarlo,

00:48:03.100 --> 00:48:07.240
y eso luego ocasiona problemas de incompatibilidad en tus aplicaciones,

00:48:07.680 --> 00:48:11.060
porque un proyecto lo creaste con NPM 2, luego

00:48:11.060 --> 00:48:14.720
otro lo creaste con el NPM 2, y tanto, eso luego genera

00:48:14.720 --> 00:48:19.080
compatibilidades, por eso se crea un gestor de paquetes que se llama NVM,

00:48:19.080 --> 00:48:23.220
Node Version Manager es un administrador

00:48:23.220 --> 00:48:26.760
de NPM, de Node Package Manager, entonces

00:48:26.760 --> 00:48:30.420
NBM te permite fácilmente decirle,

00:48:30.900 --> 00:48:34.660
NBM version 2, y me instala NPM 2,

00:48:34.960 --> 00:48:38.520
quiero cambiarlo, desde aquí le digo, ahora instálame la 2.5,

00:48:38.940 --> 00:48:43.340
y NPM guarda la versión 2, y ahora te instala la 5, y la usa,

00:48:44.520 --> 00:48:46.980
ya me quiero cambiar de la

00:48:46.980 --> 00:48:50.340
2.5 porque con eso hice un proyecto, y luego

00:48:50.980 --> 00:48:55.100
quiero regresar un proyecto que lo hice con una versión de Node más viejita,

00:48:55.240 --> 00:48:58.800
me cambio a la versión particular, puedo listar

00:48:58.800 --> 00:49:02.980
cuáles versiones tengo y usar la que yo quiera, entonces usé NVM,

00:49:05.160 --> 00:49:07.740
con esto checas las versiones de Node,

00:49:08.000 --> 00:49:10.960
y ya, respecto a GitHub, se crearon

00:49:10.960 --> 00:49:15.160
los dos repos con esta instancia de tu correo,

00:49:15.160 --> 00:49:18.300
se creó una cuenta de Gmail, Giovanni Valencia de Gmail,

00:49:18.920 --> 00:49:22.880
tu nombre de usuario, se registró con GitHub, en GitHub creaste

00:49:22.880 --> 00:49:26.200
los dos repositorios con sus readme y ya,

00:49:26.980 --> 00:49:31.420
y bueno, GitHub ya no permite hacer la autenticación

00:49:31.420 --> 00:49:35.080
por contraseña en tu máquina local, es decir,

00:49:35.460 --> 00:49:38.860
que cuando ya hago, quiero hacer un commit a tu repositorio,

00:49:38.920 --> 00:49:42.380
aunque yo tenga configurado mi usuario y mi password, GitHub,

00:49:42.380 --> 00:49:45.960
al momento de hacer el commit, el push te va a decir

00:49:45.960 --> 00:49:50.100
usuario y contraseña, tú metes tu usuario y tu contraseña creando

00:49:50.100 --> 00:49:53.980
creyendo que son las de, con las que hice sesión en GitHub,

00:49:54.180 --> 00:49:57.100
que por ahí creo que las puse las contraseñas,

00:49:57.940 --> 00:50:02.280
bueno, eso de menos, creo que están por acá, creo que te las pasé,

00:50:02.580 --> 00:50:05.380
aquí deben, no me acuerdo dónde las puse, pero ahí deben de estar,

00:50:07.380 --> 00:50:09.920
no, pues de hecho para todo el password siempre es

00:50:09.920 --> 00:50:14.100
este, Giovanni Valencia, no me acuerdo dónde te puse eso,

00:50:14.300 --> 00:50:17.400
teníamos otra chuleta donde estaban las cuentas,

00:50:17.580 --> 00:50:20.540
pero bueno, eso básicamente es eso,

00:50:20.600 --> 00:50:26.020
cuando tú quieres hacer un push, ya te pide la

00:50:26.020 --> 00:50:30.020
contraseña, ya no es la contraseña que ocupa,

00:50:30.240 --> 00:50:32.420
sino que más bien este,

00:50:33.660 --> 00:50:36.800
te pide un pad, esto lo sacas del repositorio,

00:50:37.620 --> 00:50:40.720
es como una llave, la metes en el

00:50:40.720 --> 00:50:44.840
password, el usuario sí puede seguir usando este, en el password

00:50:44.840 --> 00:50:48.740
ya tienes que meter este, ya con eso te permite hacer el push,

00:50:49.960 --> 00:50:52.220
y ya, ya con eso,

00:50:52.680 --> 00:50:55.220
ya con eso te conectas,

00:50:56.560 --> 00:51:00.620
y ya, esa es la parte de, digamos de este,

00:51:01.180 --> 00:51:04.720
de este archivo, ahí tienes alguna duda, va,

00:51:04.720 --> 00:51:09.040
entonces ya al último faltaría nada más el tema de los repositorios,

00:51:09.440 --> 00:51:13.060
estos son los calls, básicamente esto lo copies y pegas en postman,

00:51:13.260 --> 00:51:17.040
y te arman los endpoints, estos son los endpoints, el login, el registro,

00:51:17.180 --> 00:51:20.380
el listar all, listar por ID, el update y el delete,

00:51:21.140 --> 00:51:24.600
sí, y son los endpoints al puerto, al servidor de backend,

00:51:25.120 --> 00:51:28.780
puerto 80 redireccionan 3000 por NGINX,

00:51:29.140 --> 00:51:30.600
y aquí están los paths,

00:51:32.300 --> 00:51:34.040
users, los parámetros,

00:51:34.860 --> 00:51:38.480
y la parte del token, el token básicamente se manda como un header,

00:51:38.880 --> 00:51:43.040
que se construye así, authorization, viewer, y aquí mandas este token,

00:51:43.680 --> 00:51:46.200
este token te digo que viene del login,

00:51:46.720 --> 00:51:50.520
pero ahorita te los pido con más detalle, en la aplicación, pero realmente

00:51:50.520 --> 00:51:54.460
internamente, esto es lo que se está mandando como petición,

00:51:54.580 --> 00:51:58.080
cuando yo quiero hacerle una petición y decirle, oye, tráeme un get all,

00:51:58.080 --> 00:52:02.520
realmente el backend arma esto, por atrás, por abajito,

00:52:02.760 --> 00:52:05.600
perdóname, el frontend, el frontend arma esto,

00:52:05.960 --> 00:52:10.120
en el archivo que te dije acá de services, cuando te explicaba aquí

00:52:10.120 --> 00:52:14.240
la arquitectura del front, aquí bueno lo quité,

00:52:14.400 --> 00:52:17.340
pero aquí te decía que había una carpeta que se llama services,

00:52:17.740 --> 00:52:22.360
services, esa lógica lo que hace es armar estos endpoints,

00:52:23.180 --> 00:52:26.120
se va al get all, arma esto,

00:52:26.880 --> 00:52:31.340
pega el token, que es una variable de esa opción, del local storage,

00:52:31.940 --> 00:52:34.120
y ya, eso lo arma y lo manda,

00:52:35.560 --> 00:52:38.060
te da una respuesta y ya, esos son los calls,

00:52:38.140 --> 00:52:40.140
los calls, bueno,

00:52:42.220 --> 00:52:45.240
entonces, ya, nada más me queda explicarte el repo,

00:52:46.020 --> 00:52:49.780
el usuario y el front, el backend, primero vamos con el backend,

00:52:49.900 --> 00:52:53.340
así de forma rápida, vamos a ver todo esto que es,

00:52:53.340 --> 00:52:56.940
ah, bueno, es que está prendida la aplicación, la podemos quitar esto,

00:52:57.800 --> 00:53:00.280
y ya, así es como se ve tu front,

00:53:01.060 --> 00:53:02.060
entonces, ¿qué hace?

00:53:04.520 --> 00:53:08.580
¿Qué hace el GitHub? Pues tienes dos ramas, el main y el develop,

00:53:08.920 --> 00:53:13.340
si yo me cambio, yo todo lo hice en develop, y en develop, aquí están mis

00:53:13.340 --> 00:53:16.880
commits, realmente, creo que son solamente

00:53:16.880 --> 00:53:20.220
cuatro commits, lo que yo llevo de historia, nada más en cuatro commits,

00:53:20.220 --> 00:53:22.680
y en el back-end, aquí, en el back-end,

00:53:22.680 --> 00:53:25.200
entonces, aquí es el commit, este es el proyecto,

00:53:27.180 --> 00:53:29.460
básicamente, esto es un proyecto basado en node

00:53:29.460 --> 00:53:33.720
y en express, el proyecto tiene un package JSON,

00:53:34.400 --> 00:53:37.840
que es como si fuera tu archivo de configuración,

00:53:38.160 --> 00:53:41.420
y aquí están listados todos los paquetes que tienen la aplicación,

00:53:41.920 --> 00:53:45.400
el nombre, user backend, la versión, una descripción,

00:53:45.400 --> 00:53:49.660
tu archivo main, scripts, para que tu puedas hacer pruebas,

00:53:52.340 --> 00:53:54.200
y las dependencias, que es lo importante,

00:53:54.860 --> 00:53:57.620
back-grip, para la encriptado de contraseñas,

00:53:58.040 --> 00:54:01.860
estos son cosas que ocupa ahí, el cores, núcleo,

00:54:02.120 --> 00:54:05.900
todo esto, este .m es un

00:54:05.900 --> 00:54:09.240
paquete que sirve para leer variables

00:54:09.240 --> 00:54:13.400
de ambiente de un archivo, que se llama .m,

00:54:13.400 --> 00:54:17.360
de hecho . en ingles es punto, .m, entonces,

00:54:17.600 --> 00:54:21.680
esos archivos .m definen propiedades, este paquete te permite

00:54:21.680 --> 00:54:25.680
leer esas propiedades, propiedades como, por ejemplo, los passwords,

00:54:26.020 --> 00:54:29.620
de bases de datos, esas madres, que no deben

00:54:29.620 --> 00:54:34.120
estar ahí contenidos en el código, express, que es el framework,

00:54:34.800 --> 00:54:37.880
JSON Web Token, que es la parte de Bureau Token, que ahorita vamos a ver,

00:54:38.640 --> 00:54:41.220
el cliente para conectarme a MySQL,

00:54:41.220 --> 00:54:46.540
SQLize ORM, y el cliente de SQLize para hacer

00:54:46.540 --> 00:54:50.420
migraciones, comandos, todos estos dentro de la

00:54:50.420 --> 00:54:53.040
línea de comandos, va,

00:54:54.400 --> 00:54:57.040
este APP.js, que es el archivo principal,

00:54:58.240 --> 00:55:01.220
básicamente, aquí está, esta es la aplicación

00:55:02.220 --> 00:55:05.740
inicial, aquí en paquetas, si configuras

00:55:05.740 --> 00:55:09.440
express, levantas la aplicación

00:55:09.440 --> 00:55:12.820
en el puerto 3000, que es aquí donde te decía que podíamos

00:55:13.780 --> 00:55:17.320
levantar nosotros el, cambiar el puerto al

00:55:17.320 --> 00:55:21.500
22 o uno de esos, sin hacer la redirección,

00:55:21.940 --> 00:55:23.800
ya con eso me llegaba,

00:55:26.100 --> 00:55:29.220
me permitía escuchar y le hubiera pegado la petición,

00:55:29.380 --> 00:55:33.120
que más ocupas todo esto, que lo ocupas, así son las

00:55:33.120 --> 00:55:37.440
por default de express, y aquí estás metiendo nada más un

00:55:37.440 --> 00:55:41.700
API users, que ese vendría a ser el path, el path

00:55:41.700 --> 00:55:45.540
de tus endpoints, cuando ves aquí el core, todos los endpoints

00:55:45.540 --> 00:55:49.640
tienen ese path API users, y luego

00:55:49.640 --> 00:55:53.820
ya lo que le sigue, ese ya es el, la ruta, el endpoint,

00:55:54.260 --> 00:55:57.640
va, login, registers, pero bueno, el path

00:55:57.640 --> 00:56:01.380
es este API users, todos están dentro de ese path,

00:56:01.640 --> 00:56:05.440
que es este, y el user router, si tú te fijas, lo

00:56:05.560 --> 00:56:09.400
exporta, o más bien aquí lo importa, de un paquete que es

00:56:09.400 --> 00:56:13.460
en el source, routes, users, entonces, este, ese

00:56:13.460 --> 00:56:17.360
es lo primero que podrías revisar, el routers,

00:56:17.640 --> 00:56:21.000
entonces, me voy acá, y me voy al source,

00:56:21.560 --> 00:56:24.980
ah, no es cierto, perdóname, no hay un source routers, es aquí, routes,

00:56:26.000 --> 00:56:29.320
el source routers es en el route, bueno, aquí está importando

00:56:29.320 --> 00:56:32.860
este paquete, routes, users, aquí está,

00:56:32.860 --> 00:56:37.620
entonces, esto que hace, básicamente estas son las rutas de los endpoints,

00:56:37.840 --> 00:56:41.160
entonces, aquí lo que está haciendo es que llegue un pose,

00:56:41.800 --> 00:56:45.120
un get, aquí por ejemplo un put,

00:56:45.620 --> 00:56:49.200
o aquí un delete, va, entonces, es una API verbosa

00:56:49.200 --> 00:56:52.740
que puedes usar verbos de HTTP, pose,

00:56:53.160 --> 00:56:57.080
gets, puts, deletes, va, para cada

00:56:57.080 --> 00:57:01.120
comando, es característica de una, aquí está el método

00:57:01.120 --> 00:57:04.900
de login, aquí está la lógica, todo lo que hace el login,

00:57:05.260 --> 00:57:09.420
sale, llega del body, un email y un

00:57:09.420 --> 00:57:13.640
password, entonces, el login, si te fijas, aquí está, nada más voy a explicar uno,

00:57:14.060 --> 00:57:17.460
son los parámetros que llega, email y password,

00:57:18.300 --> 00:57:21.180
sí, como JSON, entonces, aquí llega email,

00:57:21.400 --> 00:57:24.900
llega password, del body, sí, los cacho,

00:57:25.320 --> 00:57:28.860
hago primero una búsqueda, todo esto es gracias a este,

00:57:28.860 --> 00:57:32.780
que yo tengo configurado los modelos con esto,

00:57:32.940 --> 00:57:36.300
con el paquete, yo puedo requerir los models,

00:57:36.420 --> 00:57:40.620
los models están, aquí voy a abrir otra pestaña,

00:57:40.840 --> 00:57:44.820
como para entrar a la, esta, exacto, y esto me abre los

00:57:44.820 --> 00:57:48.400
models, entonces, acá está, models,

00:57:48.920 --> 00:57:52.800
por ejemplo, users, entonces, aquí está, mi usuario,

00:57:53.060 --> 00:57:56.860
con SQLize, es mi mapeo a la tabla de users, yo me

00:57:56.920 --> 00:58:00.700
conecto, aquí hay un archivo de configuración,

00:58:01.160 --> 00:58:05.000
ya él sabe, es un ORM, quién es la conexión a la base de datos

00:58:05.000 --> 00:58:09.000
y todo eso, defino los modelos, la chingada,

00:58:09.220 --> 00:58:11.400
ya, esto es este, el modelo,

00:58:13.020 --> 00:58:17.180
y lo carga acá, busca en la tabla de usuarios, por email,

00:58:17.720 --> 00:58:20.860
si no existe, no lo encontré, la chingada,

00:58:21.300 --> 00:58:25.300
es básicamente esto, ahora, login tiene un mecanismo,

00:58:25.300 --> 00:58:29.720
aquí está lo del token, que es este,

00:58:30.020 --> 00:58:33.420
este, sí, tiene una biblioteca que se llama

00:58:33.420 --> 00:58:37.700
JWT, JSON Web Token, lo que hace es hacer una firma,

00:58:38.300 --> 00:58:41.480
bueno, esto básicamente se basa en un,

00:58:42.120 --> 00:58:45.320
JSON Web Token es, cómo decirlo, es un estándar

00:58:45.320 --> 00:58:47.740
para crear tokens de seguridad,

00:58:50.380 --> 00:58:54.600
básicamente ocupa un encriptado a través de,

00:58:54.600 --> 00:58:58.360
esto ya lo tiene obviamente, es una biblioteca,

00:58:59.060 --> 00:59:02.760
ya lo hace internamente, qué hace, no sé, lo que hace es eso,

00:59:03.020 --> 00:59:06.600
le llama sign al método, y lo que ocupa es

00:59:07.500 --> 00:59:10.820
tres datos, en este caso, lo que tú quieres

00:59:12.380 --> 00:59:15.180
encriptar, tiene que validarse con un secreto,

00:59:15.300 --> 00:59:18.760
este secreto, si te fijas, está haciendo uso de un .env,

00:59:18.900 --> 00:59:22.080
esto lo vas a encontrar en una variable de

00:59:22.080 --> 00:59:24.860
un secreto,

00:59:24.940 --> 00:59:29.840
en teoría no se subiría, pero como es un ejercicio, yo lo subí,

00:59:30.100 --> 00:59:33.680
y la expiración del token, en este caso, expira en

00:59:33.680 --> 00:59:37.280
86.400 segundos, o sea, 24 horas,

00:59:37.940 --> 00:59:41.360
cada que tú crees un token desde tu aplicación,

00:59:41.440 --> 00:59:44.260
dura una hora, digo, un día,

00:59:45.040 --> 00:59:48.860
tú mediante un día puedes empezar a usar ese token,

00:59:48.860 --> 00:59:51.280
pasa ese día y ya no sirve,

00:59:52.460 --> 00:59:55.820
te saca de la sesión y vuelves a hacer login,

00:59:56.800 --> 01:00:00.780
puedes volver a hacer login y te va a generar un token nuevo,

01:00:02.180 --> 01:00:04.760
básicamente esto es el login, esto es el tema de los

01:00:04.760 --> 01:00:08.820
tokens, entonces, así lo cacha

01:00:08.820 --> 01:00:12.860
el vaquero, lo cacha y listo,

01:00:13.860 --> 01:00:16.260
entonces cuando ya te dice que todo está bien,

01:00:16.260 --> 01:00:20.920
te manda una respuesta que te dice el login exitoso, te manda el token,

01:00:21.520 --> 01:00:24.300
todo esto en formato JSON y te manda el usuario

01:00:24.300 --> 01:00:28.500
que creaste, que inició esta sesión mejor dicho, te dice cuál es su ID,

01:00:29.000 --> 01:00:32.260
su nombre y el email, el ID lo sabe porque lo

01:00:32.800 --> 01:00:35.940
recupere primero de la base de datos acá,

01:00:37.260 --> 01:00:40.480
ahí está, eso es lo que hace, y bueno, maneja el cache en caso

01:00:40.480 --> 01:00:43.140
de que algo haya pasado, mando este error,

01:00:43.140 --> 01:00:45.200
sí, más o menos,

01:00:45.780 --> 01:00:50.500
cada vez que tú hagas un login, la aplicación te va a servir con un JWT,

01:00:50.720 --> 01:00:55.140
ahora, ese es como lo genera, ahora, cómo ocupa el token

01:00:55.140 --> 01:00:59.080
otro endpoint, por ejemplo, el registro, te decía que

01:00:59.080 --> 01:01:03.200
como son usuarios nuevos, a ese wey no le puedes meter la validación

01:01:03.200 --> 01:01:07.240
de token, porque son usuarios que no existen, ese no ocupa

01:01:07.240 --> 01:01:11.140
nada de tokens, ahí se ve que no ocupa ni madres,

01:01:11.140 --> 01:01:15.160
solamente recibo lo que me mandas, lo encrypto,

01:01:15.260 --> 01:01:19.180
su password, lo agrego en la base de datos, y aquí

01:01:19.180 --> 01:01:23.580
es donde decíamos que tal vez pudimos haber puesto una validación como las de acá,

01:01:24.140 --> 01:01:27.260
de que si ya existe ese email, le digas, no, no puedes ingresar,

01:01:27.500 --> 01:01:29.940
registrarte con ese email, aquí se hacía eso,

01:01:31.420 --> 01:01:35.440
el registro, la lista, la lista si tú te fijas,

01:01:35.580 --> 01:01:37.580
el get user si ocupa un token,

01:01:39.080 --> 01:01:41.500
entonces, a ese parámetro,

01:01:42.020 --> 01:01:45.860
bueno, a esa ruta, le estoy diciendo verify

01:01:45.860 --> 01:01:49.780
token, déjame ver aquí, porque el login

01:01:49.780 --> 01:01:53.820
no se llama verify token, se llama token, ok, va,

01:01:54.200 --> 01:01:57.200
entonces, verify token es un, igual,

01:01:58.240 --> 01:02:02.400
creo que aquí viene, también lo creamos, no me acuerdo si creamos el middle word,

01:02:02.680 --> 01:02:05.460
creo que sí, a ver, vamos a ver qué viene,

01:02:05.960 --> 01:02:09.400
no me acuerdo si es un paquete o es algo que creamos, pero al final

01:02:09.400 --> 01:02:13.320
está cachando esta librería, ok, sí lo creemos nosotros, entonces,

01:02:13.900 --> 01:02:17.500
ocupas un paquete, una librería, que nosotros creamos,

01:02:17.740 --> 01:02:21.100
se llama, está en middle word, authentication, se llama verify token,

01:02:21.920 --> 01:02:25.480
eso lo estoy metiendo aquí en el listado

01:02:25.480 --> 01:02:28.960
de usuarios, por ejemplo, en el get all, o en el get by ID,

01:02:29.340 --> 01:02:33.040
y tú simplemente al meter esto en las rutas, la ruta es un framework,

01:02:33.040 --> 01:02:37.100
si tú te fijas, también es un paquete que ya viene con express, estos cabrones

01:02:37.100 --> 01:02:41.180
ya se conectan entre sí, ya se conectan con JWT,

01:02:41.280 --> 01:02:45.420
la chingada, si tú te fijas, login no tiene el tercer parámetro,

01:02:45.500 --> 01:02:49.500
que es el middle word, o la validación

01:02:49.500 --> 01:02:53.200
de un token, el registro tampoco, pero a partir de

01:02:53.200 --> 01:02:56.940
los demás, las demás rutas, perdón, ya tienen

01:02:56.940 --> 01:03:01.100
el verify, si te fijas, con eso, yo no le hago

01:03:01.100 --> 01:03:05.180
más que importar la función que valida el token, y ya,

01:03:05.220 --> 01:03:09.100
la ruta está protegida, esa lógica la delegas acá, y

01:03:10.080 --> 01:03:13.640
si es válido el token, la ruta entra, si no,

01:03:13.940 --> 01:03:17.400
a la chingada, no te deja entrar, ese método

01:03:17.400 --> 01:03:21.140
lo ves acá en el verify token, aquí está, y qué es lo que hace,

01:03:21.640 --> 01:03:25.060
pues, ya, saca del request, el header,

01:03:26.100 --> 01:03:29.100
en este caso, cuando tú vas a mandar un

01:03:29.100 --> 01:03:33.540
parámetro con, le vas a pegar un endpoint con

01:03:33.540 --> 01:03:37.100
con este, con token, es esto,

01:03:37.100 --> 01:03:41.000
no, ocupa el header, por eso lo estamos

01:03:41.000 --> 01:03:45.000
mandando, el authorization, entonces, este wey va a leer

01:03:45.000 --> 01:03:49.200
un token que se llama access token, puede venir como access token,

01:03:49.820 --> 01:03:53.100
sí, puede venir como header authorization,

01:03:53.900 --> 01:03:56.280
que en este caso llega así, como authorization,

01:03:57.560 --> 01:04:00.080
este, en express,

01:04:00.320 --> 01:04:04.240
los headers son case insensitive, son insensibles, quiere decir que yo

01:04:04.240 --> 01:04:08.340
pude haberlo metido en camel case, en uppercase,

01:04:08.700 --> 01:04:11.720
combinando ahí las letras, y al final siempre lo va a cachar así, no,

01:04:11.940 --> 01:04:15.660
entonces, le da igual que sea mayúscula o minúscula la primer letra,

01:04:15.820 --> 01:04:19.580
entonces, aquí, dice que si no me mandaste el token en el header,

01:04:20.280 --> 01:04:23.880
le digo, no sabes qué wey, mándame un token, porque si no, no te dejo

01:04:23.880 --> 01:04:24.280
así, va a poder verificar,

01:04:25.500 --> 01:04:28.780
entonces, las rutas que requieran esta función,

01:04:28.940 --> 01:04:32.580
esta función, verify, de entrada, van a poder

01:04:32.580 --> 01:04:36.320
acceder, sí, sólo sí, en el encabezado, viene el header,

01:04:36.680 --> 01:04:39.860
viene esto, si me estás mandando el authorization,

01:04:40.420 --> 01:04:51.880
ahí no estoy validando que contiene el token, nada más,

01:04:51.880 --> 01:04:54.720
Si esto no sucede, entonces el flujo continúa.

01:04:54.800 --> 01:04:58.340
Entonces el token, básicamente le digo que inicie con la

01:04:58.340 --> 01:04:59.320
palabra beerer.

01:04:59.600 --> 01:05:01.680
Eso es de cajón, es un estándar.

01:05:01.880 --> 01:05:05.840
Si yo voy a mandar esta palabrita, beerer, espacio.

01:05:06.620 --> 01:05:08.000
Ya está, se ha ido un espacio.

01:05:08.340 --> 01:05:09.560
Y luego viene el token.

01:05:09.700 --> 01:05:10.680
¿Así se manejan los tokens?

01:05:11.520 --> 01:05:12.340
Acá está el token.

01:05:13.880 --> 01:05:14.740
Aquí está el token.

01:05:15.440 --> 01:05:18.820
Sí, entonces yo le digo, si el token, ya lo caché,

01:05:18.820 --> 01:05:20.180
viene acá.

01:05:21.200 --> 01:05:25.740
Inicia con esto, entonces le quito la palabra token y

01:05:25.740 --> 01:05:27.460
solamente me quedo con esta madre.

01:05:28.560 --> 01:05:30.940
Eso es lo que es esa función de ahí, ¿no?

01:05:31.900 --> 01:05:34.120
Le quitas siete caracteres que son estos.

01:05:34.940 --> 01:05:37.200
Toda la longitud me lo traes y aquí está el token.

01:05:37.720 --> 01:05:40.280
Y luego con la misma biblioteca de JSON Web Token,

01:05:40.440 --> 01:05:43.580
lo que hago es cacho este token,

01:05:45.060 --> 01:05:48.060
lo valido con mi token, con mi secreto que yo tengo allá.

01:05:48.980 --> 01:05:52.040
Si te fijas, ¿por qué van a ser macho?

01:05:52.040 --> 01:05:56.360
Porque cuando yo creé un token, que lo creé en el login,

01:05:57.020 --> 01:06:00.360
lo creé y lo firmé con ese secreto, ¿sí?

01:06:00.500 --> 01:06:03.380
Es como decir, todos los tokens que yo te estoy mandando,

01:06:03.540 --> 01:06:07.000
güey, internamente tienen una llave secreta que solo el

01:06:07.000 --> 01:06:08.560
servidor conoce, ¿sí?

01:06:08.780 --> 01:06:11.400
En este caso, el secreto puede ser una palabra,

01:06:11.860 --> 01:06:14.660
hola, mundo, o secreto para abrir tokens,

01:06:14.780 --> 01:06:15.800
lo que tú quieras, ¿no?

01:06:15.800 --> 01:06:19.180
Ese secreto funciona como una llave y lo firma.

01:06:19.300 --> 01:06:23.320
Todos los tokens que están así, internamente tienen un

01:06:23.320 --> 01:06:26.000
algoritmo y creo que estos puntos que ves acá,

01:06:26.400 --> 01:06:28.000
eso es como la teoría de los tokens, ¿no?

01:06:28.000 --> 01:06:29.240
No voy a entrar tanto en detalle,

01:06:29.420 --> 01:06:33.180
pero creo que en esos puntos te lo divide y en alguna de

01:06:33.180 --> 01:06:36.080
estas partes está el encriptado de ese secreto.

01:06:36.760 --> 01:06:37.740
Entonces, ah, pues, de hecho,

01:06:37.820 --> 01:06:40.580
creo que sí es ese porque mira que se comparten entre

01:06:40.580 --> 01:06:41.440
todos, ¿ya está?

01:06:41.880 --> 01:06:43.720
Creo que ese es el secreto, ¿va?

01:06:43.720 --> 01:06:48.320
Entonces, bueno, ese secreto que viene ahí encriptado lo

01:06:48.320 --> 01:06:49.980
firma así y así los genera.

01:06:50.140 --> 01:06:53.740
Y cuando los quiere recuperar, básicamente ocupa ese mismo

01:06:53.740 --> 01:06:56.900
secreto que solamente el backend conoce y hace un

01:06:56.900 --> 01:06:59.700
decode, justamente, una decodificación.

01:07:00.280 --> 01:07:03.060
Le cacha de este token, entonces,

01:07:03.220 --> 01:07:05.860
con mi secreto y el algoritmo de desencriptado de la

01:07:05.860 --> 01:07:08.560
librería de JWT, le dice, ¿sabes qué?

01:07:08.620 --> 01:07:11.940
Esta cadena cachó con la llave,

01:07:11.940 --> 01:07:15.240
con el secreto y la pudo desencriptar.

01:07:15.500 --> 01:07:18.300
En ese momento mi token es válido.

01:07:18.480 --> 01:07:19.460
Por eso se llama el verified.

01:07:19.660 --> 01:07:22.980
Si no es válido, pues, te mando un error, ¿no?

01:07:22.980 --> 01:07:23.460
Aquí está.

01:07:23.820 --> 01:07:25.940
Si algo pasó en esa decodificación,

01:07:27.200 --> 01:07:29.060
mensaje 401 no ha actualizado.

01:07:29.480 --> 01:07:33.340
De lo contrario, te mando el user ID de la que viene en

01:07:33.340 --> 01:07:35.140
la petición, ¿sí?

01:07:35.240 --> 01:07:39.360
Todos los ricos llegan con el user ID y lo mando,

01:07:40.420 --> 01:07:40.940
decodificado.

01:07:40.940 --> 01:07:45.820
Y eso es lo que les paso a las rutas.

01:07:46.140 --> 01:07:47.800
Esa es la función del token.

01:07:48.280 --> 01:07:48.400
¿Este?

01:07:49.060 --> 01:07:49.640
Está chido, ¿no?

01:07:49.740 --> 01:07:50.420
Pues, ya.

01:07:50.840 --> 01:07:54.240
Con eso, continúa el flujo y ya funciona.

01:07:55.540 --> 01:07:57.360
Eso es lo que hace el app y eso es lo que hace el

01:07:57.360 --> 01:07:58.600
servidor, en pocas palabras.

01:07:59.040 --> 01:07:59.460
Y, pues, ya.

01:08:00.540 --> 01:08:05.700
El front está un poquito más talachudo,

01:08:07.100 --> 01:08:10.000
porque lo que hace este güey igual tiene dos ramas.

01:08:10.000 --> 01:08:10.800
Aquí está el red.

01:08:11.680 --> 01:08:13.760
Aquí está Vue.

01:08:13.920 --> 01:08:17.040
Sí, Vue ocupa igual su piche de paquete JSON.

01:08:17.280 --> 01:08:18.980
Si te fijas, todo es muy similar.

01:08:19.060 --> 01:08:21.720
La estructura en paquetes en back y front.

01:08:22.240 --> 01:08:26.440
Otra de las ventajas de usar el ecosistema node, ¿no?

01:08:27.280 --> 01:08:28.120
Basado en JavaScript.

01:08:28.440 --> 01:08:30.860
Entonces, esta paquete, si tú también te acuerdas,

01:08:30.920 --> 01:08:32.220
lo vimos en el back, ¿no?

01:08:32.220 --> 01:08:33.480
Ahora lo estamos viendo en el front.

01:08:33.960 --> 01:08:36.120
Aquí está la versión de Vue.

01:08:36.360 --> 01:08:37.780
Así se llama tu proyecto.

01:08:38.700 --> 01:08:42.840
Tiene scripts para construcción, para hacer link,

01:08:43.020 --> 01:08:43.880
para hacer server.

01:08:44.480 --> 01:08:45.100
Todo esto, ¿no?

01:08:45.100 --> 01:08:46.540
Tiene estas dependencias.

01:08:46.700 --> 01:08:49.940
Actios para la comunicación hacia APIs externas.

01:08:50.020 --> 01:08:52.800
En este caso, este es el cliente que nos permite

01:08:52.800 --> 01:08:54.200
comunicarnos a las APIs.

01:08:55.500 --> 01:08:57.780
Tiene este Vue.

01:08:58.020 --> 01:08:59.240
Tiene el router.

01:08:59.860 --> 01:09:02.920
Vue.tify, que es el material.

01:09:03.860 --> 01:09:05.860
Sale y ya.

01:09:07.080 --> 01:09:07.600
Básicamente.

01:09:08.420 --> 01:09:09.160
No tiene más.

01:09:09.960 --> 01:09:10.740
Ahí está el front.

01:09:11.760 --> 01:09:12.460
¿Qué más?

01:09:13.460 --> 01:09:16.400
Pues de aquí, creo que, a ver, vamos a ver si Vue.tify.

01:09:16.720 --> 01:09:19.160
Este no se mueve.

01:09:20.100 --> 01:09:20.820
Esto no se mueve.

01:09:20.940 --> 01:09:22.660
No, no, de aquí ya nada se mueve.

01:09:23.020 --> 01:09:24.680
De aquí ya solamente.

01:09:25.380 --> 01:09:26.560
Sí, vamos a ver cómo.

01:09:26.960 --> 01:09:27.240
Mira.

01:09:27.940 --> 01:09:29.860
Aquí en public, ¿qué tienes?

01:09:30.320 --> 01:09:33.300
No, public contiene un archivo HTML index.

01:09:33.860 --> 01:09:38.220
Este es, digamos, donde todo se encuentra contenido.

01:09:38.800 --> 01:09:41.640
Aquí, si te fijas, tiene un único div.

01:09:42.280 --> 01:09:45.100
Ese div carga el componente app.

01:09:45.180 --> 01:09:46.940
Es lo que te decía de los componentes.

01:09:47.900 --> 01:09:51.520
Entonces, se carga un componente que se llama app.

01:09:52.040 --> 01:09:53.800
Vamos a buscar ese componente app.

01:09:53.920 --> 01:09:55.320
Es el componente principal.

01:09:55.960 --> 01:09:57.160
Y creo que está aquí en source.

01:09:57.220 --> 01:09:58.460
Creo que es tu componente app.

01:09:58.600 --> 01:09:59.060
Aquí está.

01:09:59.800 --> 01:10:01.980
Generalmente, el nombre del archivo es el nombre del

01:10:01.980 --> 01:10:03.920
componente que se ocupa en el HTML.

01:10:04.540 --> 01:10:05.680
Entonces, vamos a ver qué tiene el main.

01:10:06.120 --> 01:10:09.440
El main define cómo se carga, cómo se crea,

01:10:09.440 --> 01:10:11.020
más bien dicho, el componente app.

01:10:12.000 --> 01:10:13.460
Importa el componente.

01:10:13.840 --> 01:10:15.760
Ahorita vamos a ver qué tiene ese pinche componente.

01:10:15.880 --> 01:10:17.900
Pero este main, prácticamente,

01:10:18.980 --> 01:10:21.480
hace un create app, que es una función interna de Vue,

01:10:21.800 --> 01:10:23.400
justamente, ¿sí?

01:10:23.860 --> 01:10:26.380
Para esa aplicación, le estamos diciendo que ocupe

01:10:26.380 --> 01:10:31.200
Router, que ocupe Vue.tify y lo monte en un div que se

01:10:31.200 --> 01:10:32.920
llama identificador app.

01:10:33.360 --> 01:10:35.460
Ahí lo va a montar, ese componente.

01:10:35.720 --> 01:10:36.600
Ese es el vínculo.

01:10:36.800 --> 01:10:39.440
Es, digamos, el de cajón de todas las aplicaciones.

01:10:39.600 --> 01:10:41.680
Y el componente app trae esto.

01:10:42.480 --> 01:10:43.440
Trae un toolbar.

01:10:43.620 --> 01:10:45.800
Si te fijas, estas son etiquetas HTML.

01:10:46.460 --> 01:10:49.640
Pero son, digamos, HTML personalizados.

01:10:50.040 --> 01:10:52.700
Eso que tienes ahí, V-toolbar-title,

01:10:52.700 --> 01:10:53.900
es un componente.

01:10:54.180 --> 01:10:55.860
Entonces, es un componente, seguramente,

01:10:55.980 --> 01:10:59.100
interno de la librería del front de Vue.

01:10:59.220 --> 01:11:00.760
Y te permite hacer esto.

01:11:00.760 --> 01:11:02.560
Ese componente es este toolbar.

01:11:02.840 --> 01:11:07.500
Esta pinche, como decirlo, columnita que ves aquí,

01:11:07.900 --> 01:11:09.280
es la barra de título.

01:11:09.740 --> 01:11:12.440
Y tú le estás metiendo adentro un user frontend.

01:11:12.660 --> 01:11:15.320
Pero si me explico, eso es un toolbar title.

01:11:15.720 --> 01:11:18.260
Es un componente que tú ya puedes re-usar y así se ve.

01:11:18.660 --> 01:11:20.200
Carga estilos, carga la chingada.

01:11:20.260 --> 01:11:23.380
Y es parte del framework de Vue.tify.

01:11:23.660 --> 01:11:24.180
¿Va?

01:11:25.060 --> 01:11:25.900
Y ya.

01:11:27.040 --> 01:11:28.700
Un Router Vue.

01:11:28.900 --> 01:11:29.380
Y ya.

01:11:29.380 --> 01:11:34.220
Entonces, con esto, esto es la configuración inicial.

01:11:34.620 --> 01:11:37.740
Y a partir de ahí, ya empiezas a ver lo que hay acá en las

01:11:37.740 --> 01:11:38.380
carpetas.

01:11:38.740 --> 01:11:44.140
Los assets, que son todos los archivos estáticos que se

01:11:44.140 --> 01:11:44.800
cargan, ¿no?

01:11:44.800 --> 01:11:46.720
Logos, imágenes, la chingada.

01:11:46.840 --> 01:11:49.160
Los componentes, los plugins.

01:11:49.460 --> 01:11:52.360
Plugins tampoco vamos a ocupar gran cosa.

01:11:52.920 --> 01:11:54.140
Es Vue.tify y ya.

01:11:54.560 --> 01:11:55.640
Plugins no se ve.

01:11:56.080 --> 01:11:57.680
Componentes sí, ahorita lo checamos.

01:11:57.680 --> 01:12:00.440
Lo que te decía, las importantes son componentes,

01:12:00.560 --> 01:12:02.060
routers, services y views.

01:12:02.680 --> 01:12:02.880
Nada más.

01:12:03.640 --> 01:12:03.740
¿No?

01:12:04.340 --> 01:12:06.620
Entonces, para explicar esto así ya rápido.

01:12:07.080 --> 01:12:07.560
Componentes.

01:12:07.860 --> 01:12:10.180
Componentes nada más teníamos creo que dos.

01:12:11.300 --> 01:12:12.460
Que son él.

01:12:12.740 --> 01:12:14.960
Básicamente son formularios que se re-usan.

01:12:15.440 --> 01:12:19.740
En este caso, el formulario de diálogo son los

01:12:19.740 --> 01:12:20.600
diálogos.

01:12:20.920 --> 01:12:22.520
Por ejemplo, cuando yo quiero borrar,

01:12:22.800 --> 01:12:25.060
aquí hay un diálogo que se puede re-usar y es un

01:12:25.060 --> 01:12:25.740
componente.

01:12:25.740 --> 01:12:27.820
Aquí adentro está el diálogo.

01:12:28.820 --> 01:12:33.760
Entonces, este diálogo es el que hace y confirma la

01:12:33.760 --> 01:12:34.760
eliminación, ¿no?

01:12:34.760 --> 01:12:37.740
Está seguro de que deseas eliminar el usuario y aquí te

01:12:37.740 --> 01:12:39.500
da todo lo que trae.

01:12:39.800 --> 01:12:42.380
Básicamente, por eso te digo que no es un modelo vista

01:12:42.380 --> 01:12:43.060
controlador.

01:12:43.680 --> 01:12:45.320
Es más bien, no sé qué arquitectura,

01:12:45.360 --> 01:12:46.500
cómo podríamos llamarla.

01:12:46.660 --> 01:12:49.280
Yo le diría arquitectura basada en componentes.

01:12:49.660 --> 01:12:53.000
Básicamente, el componente te define aquí tu pinche

01:12:53.000 --> 01:12:58.400
vista, tu lenguaje de vista, HTML, y abajito,

01:12:58.840 --> 01:13:02.940
en un script está y te carga la lógica relacionada a este

01:13:04.900 --> 01:13:06.060
pinche componente.

01:13:06.420 --> 01:13:10.220
Así es igual react y angular, no.

01:13:10.220 --> 01:13:14.280
Angular te carga componente y abajo del componente,

01:13:14.380 --> 01:13:15.440
digamos, su lógico.

01:13:17.080 --> 01:13:18.140
Entonces, este es lo único.

01:13:18.340 --> 01:13:21.060
Este se me figuró más como si fuera react.

01:13:21.060 --> 01:13:22.500
Así, igualito.

01:13:23.140 --> 01:13:26.040
Que son más como aplicaciones reactivas y todo ese pedo.

01:13:26.240 --> 01:13:28.040
Pero sí, esto es más como react.

01:13:28.640 --> 01:13:30.600
Entonces, ¿qué hace esta madre?

01:13:30.740 --> 01:13:34.680
Lo único que hace es carga propiedades que van a ser

01:13:34.680 --> 01:13:39.220
usadas aquí, en este alcance de este componente.

01:13:40.300 --> 01:13:42.800
Propiedades computadas, diálogo.

01:13:43.740 --> 01:13:46.140
Estas funciones son para cachar los valores.

01:13:46.400 --> 01:13:48.780
Es que entrar a todo este pedo, wey,

01:13:48.780 --> 01:13:51.060
algo que no sé si te vaya a confundir más.

01:13:51.640 --> 01:13:54.460
Pero básicamente, esto de aquí es para que puedas

01:13:54.460 --> 01:13:58.020
compartir, bueno, más bien para que puedas activar el

01:13:58.020 --> 01:14:03.360
modelo de doble bindeo o de doble camino para compartir

01:14:03.360 --> 01:14:06.720
y comunicar variables desde un componente padre a un

01:14:06.720 --> 01:14:07.380
componente hijo.

01:14:07.980 --> 01:14:12.980
Un componente padre es un componente que, a ver si te

01:14:12.980 --> 01:14:16.500
lo puedo poner aquí como en el ejemplo de la vista

01:14:16.500 --> 01:14:20.500
cuando cargamos los aquí.

01:14:20.740 --> 01:14:24.960
Mira, por ejemplo, este de aquí vendría a ser un

01:14:24.960 --> 01:14:30.040
componente padre y su hijo vendría a ser este componente.

01:14:30.360 --> 01:14:31.120
Estos dos.

01:14:32.420 --> 01:14:32.760
Sí.

01:14:33.060 --> 01:14:35.240
Entonces, estos dos se pueden comunicar con el

01:14:35.240 --> 01:14:36.520
componente papá.

01:14:36.820 --> 01:14:40.100
A su vez, este wey es un componente papá de este wey

01:14:40.100 --> 01:14:40.560
de acá.

01:14:41.360 --> 01:14:41.500
Sí.

01:14:41.940 --> 01:14:46.000
Entonces, el modelo de esto se le llama composición de

01:14:46.000 --> 01:14:46.520
componentes.

01:14:46.520 --> 01:14:49.340
Es un modelo como si habláramos de herencia en

01:14:49.340 --> 01:14:54.660
clases, de que un objeto le hereda a otro propiedades y

01:14:54.660 --> 01:14:54.880
demás.

01:14:55.120 --> 01:14:57.820
Aquí básicamente se llama de composición.

01:14:58.120 --> 01:15:00.200
Estas propiedades, propiedades me refiero a

01:15:00.200 --> 01:15:02.300
todo lo que tú pongas acá en un atributo HTML.

01:15:02.420 --> 01:15:03.060
Esto es HTML.

01:15:03.520 --> 01:15:06.580
Los atributos que tú pones en ese pinche HTML son

01:15:06.580 --> 01:15:09.820
propiedades que le puedes componer a tu componente

01:15:09.820 --> 01:15:12.420
hijo y de esa forma pasas el valor de una

01:15:12.420 --> 01:15:13.080
propiedad.

01:15:13.080 --> 01:15:17.560
Imagínate, aquí tendría una, no sé, un position, un

01:15:17.560 --> 01:15:22.060
index, un algo, no sé, un name, y lo pasarías

01:15:22.060 --> 01:15:22.560
hacia acá.

01:15:23.000 --> 01:15:25.140
O una variable customizada, la chida.

01:15:25.780 --> 01:15:28.400
Así, eso es lo que más o menos se trata de dar a

01:15:28.400 --> 01:15:28.680
entender.

01:15:29.080 --> 01:15:31.440
Y eso es lo que manejan estas propiedades, ¿no?

01:15:31.440 --> 01:15:33.080
Las computadas.

01:15:33.480 --> 01:15:34.780
Esto es donde me tarde, ¿te acuerdas?

01:15:34.840 --> 01:15:35.820
Que me tarde como día y medio.

01:15:36.480 --> 01:15:38.000
Esto fue el pinche desmadre, ¿no?

01:15:38.760 --> 01:15:43.900
Y en este caso, el hijo, estos componentes son hijos.

01:15:44.040 --> 01:15:47.100
Un diálogo es un componente hijo que se va a imprimir en

01:15:47.100 --> 01:15:49.260
una vista, que es un componente padre.

01:15:49.920 --> 01:15:54.420
La vista del formulario, ahí mando a llamar cuando

01:15:54.420 --> 01:15:58.480
elimino algo al diálogo, ¿no?

01:15:58.880 --> 01:15:59.900
Básicamente es esto.

01:16:00.460 --> 01:16:02.000
Y los métodos que tiene, ¿no?

01:16:03.060 --> 01:16:05.740
Manejan mucho esto de emisión de eventos porque

01:16:05.740 --> 01:16:08.540
son modelos observables, te usan más bien frameworks.

01:16:09.420 --> 01:16:11.640
Sí, le tienes que echar un ojo a la composición de

01:16:11.640 --> 01:16:15.380
componentes, al primero entender eso, ¿no?

01:16:16.080 --> 01:16:18.260
Muy poquito más que son componentes de más.

01:16:19.060 --> 01:16:21.660
Programación, tal vez modelo de reactividad,

01:16:21.880 --> 01:16:24.560
modelos observables, todo eso, ¿no?

01:16:25.240 --> 01:16:26.780
Y listo.

01:16:27.200 --> 01:16:29.480
Eso es la parte de componentes.

01:16:30.760 --> 01:16:33.940
Y el router, tal vez también era medio importante.

01:16:34.460 --> 01:16:38.200
El router básicamente define las rutas de mis pantallas.

01:16:38.380 --> 01:16:40.720
Yo tengo la ruta login que, si te fijas,

01:16:40.820 --> 01:16:42.560
es la que no tiene pat, ¿no?

01:16:42.900 --> 01:16:47.860
Cuando yo meta un pat en mi aplicación que no tenga nada,

01:16:48.140 --> 01:16:51.860
solamente esto, creo que ya no van a estar abiertas, ¿no?

01:16:51.860 --> 01:16:53.820
Pero si yo meto eso, así solito,

01:16:54.040 --> 01:16:57.660
me va a redireccionar, esto es lo que hacen routers.

01:16:57.880 --> 01:17:01.960
Igual es un componente ya de view, ¿no?

01:17:01.960 --> 01:17:02.560
Aquí está.

01:17:02.760 --> 01:17:03.700
Se llama view router.

01:17:03.920 --> 01:17:07.920
No, mames, veis, antes manejar este ruteo, por ejemplo,

01:17:08.080 --> 01:17:09.860
en React era un pedo, güey.

01:17:10.080 --> 01:17:17.340
Era tener que instalarle un pinche ruteador personalizado

01:17:17.340 --> 01:17:19.700
a esta madre, un pinche huevo.

01:17:19.940 --> 01:17:22.420
Pero, bueno, aquí ahorita ya está bien en corto, mira.

01:17:22.860 --> 01:17:25.140
Yo defino el router y ya lo meto.

01:17:25.680 --> 01:17:28.400
Le digo incluso si quiero que guarde el modelo history,

01:17:28.840 --> 01:17:31.320
que es que cuando estoy aquí y yo le doy regresar,

01:17:31.320 --> 01:17:33.160
me regrese al último historia, ¿no?

01:17:33.160 --> 01:17:36.980
Es el historia del punto 1 menos 1 o menos 2,

01:17:36.980 --> 01:17:38.360
no me acuerdo qué pedo, de JavaScript.

01:17:40.200 --> 01:17:41.000
Y listo.

01:17:41.020 --> 01:17:43.480
Y con eso, básicamente te dice, ¿qué ruta?

01:17:43.480 --> 01:17:48.940
Si tú metes una ruta, se va a llamar name de tipo,

01:17:49.040 --> 01:17:53.140
por ejemplo, se va a llamar login y te lo va a asociar a

01:17:53.140 --> 01:17:53.900
un componente.

01:17:54.280 --> 01:17:56.400
En este caso, yo tengo que hacer el import de cada

01:17:56.400 --> 01:17:56.860
component.

01:17:57.420 --> 01:18:01.220
Yo voy a importar la ruta a que se llaman login,

01:18:02.060 --> 01:18:04.880
lo mapea al componente login view.

01:18:05.540 --> 01:18:06.080
Son views.

01:18:07.880 --> 01:18:12.400
El registro, el formulario a la vista registro y el user a

01:18:12.400 --> 01:18:13.620
la vista de users.

01:18:14.260 --> 01:18:18.000
O sea que yo le puedo poner users y la chingada y me va

01:18:18.000 --> 01:18:22.260
a mapear la vista que está asociada a ese componente.

01:18:22.560 --> 01:18:25.080
Aquí adentro, ya viste que te decía otro to do,

01:18:25.080 --> 01:18:27.080
que era proteger las rutas.

01:18:27.600 --> 01:18:30.060
Si no hay token, si no hay sesión,

01:18:30.280 --> 01:18:33.480
si no hay login, no me dejes entrar a ninguno de estos.

01:18:33.720 --> 01:18:35.300
Eso aquí se metía.

01:18:35.480 --> 01:18:38.220
Una configuración adicional, un guard creo que se llama.

01:18:39.100 --> 01:18:39.540
Guards.

01:18:40.060 --> 01:18:41.560
Es un guards, lo que hacen es eso.

01:18:41.700 --> 01:18:43.700
Si no hay token, mandala a la chingada.

01:18:44.580 --> 01:18:45.380
Redireccionalo acá.

01:18:46.060 --> 01:18:48.240
Si no hay token, redireccionamelo acá.

01:18:48.820 --> 01:18:52.920
A login, a que siempre haya inicio de sesión.

01:18:53.480 --> 01:18:55.300
Eso es otro mecanismo de seguridad.

01:18:56.080 --> 01:18:57.220
Y se hacía ahí.

01:18:58.760 --> 01:19:01.040
Y ya por último, de los routers.

01:19:01.480 --> 01:19:02.660
Ah, bueno, son dos más.

01:19:03.060 --> 01:19:06.280
La vista, que es el principal, y el services.

01:19:06.540 --> 01:19:07.780
El services es lo que te decía.

01:19:08.400 --> 01:19:11.840
Aquí está la conexión con el backend por medio de la

01:19:11.840 --> 01:19:12.740
librería Axios.

01:19:13.240 --> 01:19:13.720
Aquí está.

01:19:14.320 --> 01:19:17.800
Es un paquete como si fuera Ajax,

01:19:18.040 --> 01:19:19.140
cualquiera de esas librerías.

01:19:20.100 --> 01:19:21.300
En este caso, evolucionado.

01:19:21.420 --> 01:19:24.860
Y una librería muy popular es Axios en JavaScript.

01:19:25.480 --> 01:19:27.000
Entonces, Axios permite hacer esto.

01:19:27.340 --> 01:19:29.260
Chords, por así decirlo.

01:19:29.520 --> 01:19:31.200
Bueno, peticiones, mejor dicho.

01:19:32.240 --> 01:19:35.300
Esto de aquí es lo que está aquí en Axios.

01:19:36.120 --> 01:19:39.100
Le defino una constante que se llama API URL.

01:19:39.480 --> 01:19:41.620
Si te fijas, es esto junto con el path.

01:19:42.560 --> 01:19:43.320
Es hasta acá.

01:19:43.400 --> 01:19:45.760
Todo esto es común a todos los endpoints.

01:19:46.940 --> 01:19:47.700
Ahí está.

01:19:48.060 --> 01:19:48.380
Todos.

01:19:49.060 --> 01:19:52.140
Todos comparten ese API URL.

01:19:52.580 --> 01:19:54.260
Entonces, lo uso como una constante.

01:19:55.480 --> 01:19:55.900
Y ya.

01:19:56.320 --> 01:20:00.560
Aquí tienes una función para obtener el header de

01:20:00.560 --> 01:20:02.820
autorización con el token.

01:20:03.760 --> 01:20:09.440
Entonces, este, por ejemplo, vamos a ver el get all users.

01:20:10.300 --> 01:20:13.500
Si alguien, ¿cómo hace ese get all users?

01:20:13.600 --> 01:20:15.340
¿Cuándo se va a mandar a llamar?

01:20:15.340 --> 01:20:17.840
Cuando yo inicie sesión, si te fijas,

01:20:18.000 --> 01:20:22.160
cuando yo inicio sesión y la redirección de esa sesión

01:20:22.160 --> 01:20:25.680
existe, me va a llevar al componente que se llama users.

01:20:26.320 --> 01:20:27.980
A donde carga el data table.

01:20:28.520 --> 01:20:32.100
Y ahí es donde yo necesito traerme o mandar a llamar al

01:20:32.100 --> 01:20:34.040
endpoint que me trae a todos los usuarios.

01:20:34.120 --> 01:20:35.280
Al get all user.

01:20:35.580 --> 01:20:36.960
A este, ¿sí?

01:20:37.180 --> 01:20:41.400
Entonces, ese endpoint lo que hace es que yo necesito

01:20:41.400 --> 01:20:45.400
pegarle a esa API URL por medio del método get.

01:20:46.000 --> 01:20:46.840
Ahí está.

01:20:47.160 --> 01:20:50.200
Y le tengo que pasar un header en formato JSON.

01:20:50.320 --> 01:20:52.700
O sea, esto con esta palabra.

01:20:53.140 --> 01:20:56.280
Un header del tipo autorización que aquí está.

01:20:56.780 --> 01:20:57.320
Out header.

01:20:57.760 --> 01:21:00.060
Lo que hago es mandarle a llamar a esta función.

01:21:00.600 --> 01:21:02.840
Entonces, esta función lo que hace es crear,

01:21:04.840 --> 01:21:07.240
va a cachar una variable.

01:21:07.240 --> 01:21:11.420
Esta variable es global a toda tu aplicación frontend.

01:21:11.600 --> 01:21:12.200
¿Por qué es global?

01:21:12.200 --> 01:21:14.900
Porque realmente esta es una variable de decisión de esas

01:21:14.900 --> 01:21:16.480
que se quedan en el navegador.

01:21:16.620 --> 01:21:18.620
Se está quedando con el local storage.

01:21:19.160 --> 01:21:21.480
Y adentro, cuando existe login,

01:21:21.720 --> 01:21:23.400
el login lo que va a hacer es guardar,

01:21:23.560 --> 01:21:24.200
ah, pues, de hecho, aquí está.

01:21:24.340 --> 01:21:26.880
Mira, si alguien hace login, es la primera vista en el

01:21:26.880 --> 01:21:28.820
flujo, le da iniciar sesión.

01:21:28.900 --> 01:21:32.260
Y si el login es correcto, lo que va a hacer es crear

01:21:32.260 --> 01:21:36.160
una variable en el local storage llamada user.

01:21:36.720 --> 01:21:41.360
Y le va a guardar todo lo que responda el API de inicio de

01:21:41.360 --> 01:21:41.700
sesión.

01:21:42.020 --> 01:21:44.960
Si te acuerdas, ese API devolvía este,

01:21:45.200 --> 01:21:50.300
devolvía un JSON donde te dice el usuario y el token.

01:21:51.500 --> 01:21:55.520
Entonces, eso lo vamos a guardar en local storage así,

01:21:55.700 --> 01:21:56.700
con la variable user.

01:21:57.740 --> 01:22:01.720
Y entonces, la función de autenticación,

01:22:01.780 --> 01:22:05.520
lo que va a hacer es mandar ese token a las peticiones

01:22:05.520 --> 01:22:06.020
del API.

01:22:06.160 --> 01:22:10.580
O sea, va a crear esto, va a crear este header, esto,

01:22:11.360 --> 01:22:14.640
conforme a lo que ya tuvo cuando inició sesión.

01:22:15.620 --> 01:22:19.080
Entonces, ese token es el que se va propagando en todas las

01:22:19.080 --> 01:22:19.640
peticiones.

01:22:20.540 --> 01:22:23.440
Lo único que hace esa función es recuperar del local

01:22:23.440 --> 01:22:25.000
storage el user session.

01:22:25.200 --> 01:22:29.440
Si existe o si está seteado, crea el token.

01:22:29.680 --> 01:22:31.620
O sea, crea este JSON, este de acá.

01:22:31.980 --> 01:22:33.760
Si te fijas, aquí está la palabra enduro,

01:22:34.340 --> 01:22:38.240
autorization, la palabra enduro, viewer, espacio, esto.

01:22:38.900 --> 01:22:39.800
Y el token.

01:22:40.400 --> 01:22:44.800
Ese token vive en el objeto user session.token,

01:22:45.080 --> 01:22:47.960
que este es lo que devuelve la aplicación, el backend.

01:22:48.640 --> 01:22:51.320
Con eso, ya darme esta pinche cadenita de acá.

01:22:51.960 --> 01:22:55.100
Y ya puedo hacer la petición con access o con el

01:22:55.100 --> 01:22:55.460
que sea.

01:22:56.040 --> 01:22:58.260
Si te fijas, está muy sencillo esta petición.

01:22:58.340 --> 01:23:00.240
Ahí está y la devuelve.

01:23:00.820 --> 01:23:02.500
Ya, eso es lo que hacen los servicios.

01:23:03.260 --> 01:23:05.340
Este se llama por eso la capa service.

01:23:06.000 --> 01:23:07.880
Y se conecta a la API de user service.

01:23:08.100 --> 01:23:08.580
Entonces, ahí está.

01:23:08.820 --> 01:23:10.600
Lo mismo hacen todos los demás, mira.

01:23:12.220 --> 01:23:12.740
Igualito.

01:23:13.180 --> 01:23:15.180
Pedir y secar la sesión.

01:23:15.320 --> 01:23:17.500
Y el logout también lo pusimos aquí,

01:23:17.560 --> 01:23:19.180
aunque realmente este no es un service.

01:23:19.440 --> 01:23:22.620
Esto realmente debió haber estado internamente en el

01:23:22.620 --> 01:23:23.660
puro front-end.

01:23:23.780 --> 01:23:24.660
¿Qué hace esto?

01:23:25.040 --> 01:23:27.180
No hay un endpoint de cerrar sesión.

01:23:27.200 --> 01:23:30.060
Lo único que hace es remover el local storage el

01:23:30.060 --> 01:23:30.640
Y ya lo quito.

01:23:30.900 --> 01:23:32.920
Ya a la chingada, ¿no?

01:23:33.280 --> 01:23:34.440
Lo quito y demás.

01:23:35.940 --> 01:23:38.240
¿Qué mecanismos puedes implementar todavía por

01:23:38.240 --> 01:23:38.420
fuera?

01:23:38.820 --> 01:23:40.420
Si tú te fijas, lo muevo y ya.

01:23:40.780 --> 01:23:43.700
Pero si yo no cierro sesión, una persona abusada

01:23:43.700 --> 01:23:46.800
se mete a las herramientas de navegación.

01:23:46.900 --> 01:23:49.600
Ahí va el cache local storage y cache al token.

01:23:50.100 --> 01:23:51.360
Ese token expira.

01:23:51.620 --> 01:23:54.160
Un atacante no va a saber cuándo va a expirar, ¿no?

01:23:54.160 --> 01:23:56.520
Pero en este caso el nuestro expiro en 24 horas.

01:23:56.520 --> 01:23:59.180
Con ese token, güey, un atacante le puede pegar a las

01:23:59.660 --> 01:24:01.240
peticiones de un servidor.

01:24:01.600 --> 01:24:04.200
Por eso es que estas pendejadas no son tan seguras, ¿no?

01:24:04.200 --> 01:24:06.980
Aunque te digan el token, puede pasar eso.

01:24:07.380 --> 01:24:09.820
Ahora, no son tan seguras si no la saben manejar.

01:24:10.160 --> 01:24:13.980
Un mecanismo para asegurar eso es el blacklist, ¿no?

01:24:14.280 --> 01:24:15.720
O lista negra.

01:24:15.880 --> 01:24:18.940
Cuando alguien se da cuenta de que un token ya no debe

01:24:18.940 --> 01:24:21.780
ser usado porque cambió o porque es otro por la

01:24:21.780 --> 01:24:24.120
chingada o porque alguien simplemente te lo diga.

01:24:24.140 --> 01:24:25.820
O sea, yo sé de los que cree que debe de existir.

01:24:25.820 --> 01:24:27.460
Yo lo manejaría así, ¿no?

01:24:27.460 --> 01:24:29.080
Un API que maneje los tokens.

01:24:29.760 --> 01:24:33.320
Ahí sí puedes generar un mecanismo de expiración.

01:24:33.520 --> 01:24:36.620
Bueno, más bien de, ¿cómo decirlo?

01:24:38.040 --> 01:24:41.100
Sí, de caducar un token, por así decirlo, ¿no?

01:24:41.360 --> 01:24:44.040
Entonces, lo que puedes hacer es crear una lista negra,

01:24:44.180 --> 01:24:49.000
literal, guardar este pinche token y una condicional

01:24:49.000 --> 01:24:52.320
burda de si en las peticiones me llega este

01:24:52.320 --> 01:24:53.800
token, mándalo en la chingada.

01:24:53.800 --> 01:24:57.260
Esto lo estaríamos guardando en lo que se llama una lista

01:24:57.260 --> 01:24:58.200
negra, ¿no?

01:24:58.660 --> 01:25:00.680
Tokens quemados, ahí está.

01:25:01.160 --> 01:25:02.840
Esos cabrones ya no entraron.

01:25:03.420 --> 01:25:06.000
Y esa lista a lo mejor un pinche proceso que las

01:25:06.000 --> 01:25:10.520
elimine cada 24 horas, que es el proceso que dura mi,

01:25:10.520 --> 01:25:12.520
el tiempo que dura mi, ¿cómo se llama?

01:25:13.460 --> 01:25:14.660
Mi sesión, ¿no?

01:25:14.660 --> 01:25:15.440
24 horas.

01:25:16.560 --> 01:25:18.740
Algo interno que borre todo esto para que no se me esté

01:25:18.740 --> 01:25:21.320
guardando información ahí, este, basura.

01:25:21.920 --> 01:25:24.820
O podía regresar una base de datos, una tabla nacional.

01:25:25.160 --> 01:25:26.900
Bueno, ahí nada más verlo ejecutorio.

01:25:27.100 --> 01:25:29.360
Y es eso, así funcionan los tokens.

01:25:30.340 --> 01:25:34.460
Y ya finalmente, la última carpeta importante es la vista,

01:25:34.660 --> 01:25:36.160
o sea, donde corre todo, ¿no?

01:25:36.560 --> 01:25:38.120
Entonces, ahí tienes el login view,

01:25:38.540 --> 01:25:40.800
que son las que definimos en los routers, ¿no?

01:25:40.800 --> 01:25:42.960
El login, el registro y el usuario.

01:25:43.200 --> 01:25:45.880
El login, este madre, pinta el pinche de formularito

01:25:45.880 --> 01:25:47.220
este de acá, así.

01:25:47.820 --> 01:25:49.480
Con Beautify, la chingada.

01:25:49.620 --> 01:25:51.200
Tiene sus validaciones de campus.

01:25:51.840 --> 01:25:53.280
Ahí se ve cómo se maneja todo.

01:25:53.900 --> 01:25:58.360
Cuando haces login, literal, ese login viene a través de un

01:25:58.360 --> 01:26:00.120
pinche método click, ¿sí?

01:26:00.480 --> 01:26:02.240
Aquí le doy en Iniciar.

01:26:02.420 --> 01:26:03.020
Hace un submit.

01:26:03.240 --> 01:26:05.180
Ah, bueno, en este caso está respondiendo el submit

01:26:05.180 --> 01:26:05.740
del form.

01:26:06.000 --> 01:26:06.540
Aquí está.

01:26:07.020 --> 01:26:08.100
Se va al login.

01:26:08.520 --> 01:26:10.720
Y esta función de login, acá está,

01:26:11.320 --> 01:26:13.380
lo que hace es instanciar el user service,

01:26:13.460 --> 01:26:15.760
que es el importado de tus servicios.

01:26:16.060 --> 01:26:16.560
Aquí está.

01:26:16.560 --> 01:26:19.240
Y ya puedo acceder al método login, ¿no?

01:26:19.360 --> 01:26:21.660
Al que vimos ahí en el archivo.

01:26:21.700 --> 01:26:22.880
Le paso los parámetros.

01:26:23.320 --> 01:26:25.520
Cuando hay respuesta, creo el token.

01:26:26.160 --> 01:26:28.220
Que fíjate que esto está ahorita que no estoy viendo.

01:26:29.740 --> 01:26:31.420
Creo que, a ver, nada, déjame ver cómo prevale.

01:26:32.300 --> 01:26:34.000
Creo que está dos veces, ¿no?

01:26:34.000 --> 01:26:41.200
El sitio, el login, aquí en los services, el login.

01:26:42.420 --> 01:26:43.420
¿Dónde está el create?

01:26:43.480 --> 01:26:44.500
El login, aquí está.

01:26:45.220 --> 01:26:49.540
Sí, mira, aquí lo guardo en el pinche local storage.

01:26:50.960 --> 01:26:53.280
Y acá lo guardo como user session.

01:26:53.400 --> 01:26:55.560
Y ese user session, ah, es este.

01:26:56.160 --> 01:26:57.300
Sí, esto está mal, ¿eh?

01:26:58.480 --> 01:26:59.360
Esto está mal.

01:27:00.620 --> 01:27:01.580
Esto lo se ocupa.

01:27:01.820 --> 01:27:02.920
Para mí, verga.

01:27:03.140 --> 01:27:05.500
El que se ocupa es el user session, que se crea acá.

01:27:06.460 --> 01:27:07.620
Y acá lo consume.

01:27:09.760 --> 01:27:09.920
Esto.

01:27:09.920 --> 01:27:11.020
Esto estaba de más.

01:27:12.640 --> 01:27:13.060
Ahí está.

01:27:13.060 --> 01:27:16.620
OK, bueno, también lo que podíamos hacer es quitarlo de

01:27:16.620 --> 01:27:21.060
aquí, dejárselo acá, que creo que sería mejor.

01:27:22.000 --> 01:27:24.040
Nada más que aquí le tendríamos que cambiar a que se

01:27:24.040 --> 01:27:25.000
llame user session.

01:27:25.580 --> 01:27:26.240
Ajá, y ya.

01:27:26.360 --> 01:27:28.480
Vamos a quitar esta línea y cambiarla de lugar.

01:27:29.020 --> 01:27:30.680
Y lo que sí va a hacer es la redirección.

01:27:30.860 --> 01:27:33.200
Ahí login, redireccionámenlo a la vista de users,

01:27:33.300 --> 01:27:37.540
que es cuando carga el flujo del data table y demás.

01:27:37.700 --> 01:27:38.040
Y ya.

01:27:38.520 --> 01:27:40.140
Eso es lo que hace este formulario.

01:27:40.140 --> 01:27:42.800
El otro es justamente el de user view,

01:27:42.880 --> 01:27:44.980
que es al redireccionar el login.

01:27:45.520 --> 01:27:48.520
Y aquí está el formulario del data table, ¿no?

01:27:48.520 --> 01:27:51.400
Te pone una data table, un cabezados,

01:27:51.540 --> 01:27:55.580
la iteración del pinche de la lista de que devuelve el

01:27:55.580 --> 01:27:55.860
back.

01:27:56.420 --> 01:27:58.440
Aquí está el servidor.

01:27:59.000 --> 01:28:00.260
El servidor, digo, el endpoint.

01:28:02.800 --> 01:28:07.580
Ese pinche servicio carga cuando el componente es

01:28:07.580 --> 01:28:08.160
montado.

01:28:08.680 --> 01:28:11.360
O sea, carga cuando la página empieza a cargar.

01:28:11.540 --> 01:28:15.060
Ahí en ese momento, cuando ya se montó el componente,

01:28:15.320 --> 01:28:20.200
lo voy a llenar con lo que trae el users, ¿no?

01:28:20.440 --> 01:28:22.900
El endpoint de los usuarios, de todos los usuarios,

01:28:23.000 --> 01:28:24.120
la lista de todos los usuarios.

01:28:24.400 --> 01:28:26.980
Como tal, no es un evento que se registre en un,

01:28:27.540 --> 01:28:30.320
no es una función que se registre en un click de algo.

01:28:30.700 --> 01:28:33.000
O que yo le diga click, cargar tabla, ¿no?

01:28:33.320 --> 01:28:33.580
No.

01:28:33.580 --> 01:28:34.800
Carga en automático.

01:28:34.980 --> 01:28:35.460
Aquí está.

01:28:36.100 --> 01:28:38.500
Y ahí está todo, nosotros, pues, para editar,

01:28:39.140 --> 01:28:40.240
agregar el crud.

01:28:40.480 --> 01:28:41.740
O sea, este es el crud.

01:28:42.040 --> 01:28:44.980
Y esos peticiones con el service.

01:28:45.440 --> 01:28:47.360
O sea, que aquí tienes que tener en un import,

01:28:47.620 --> 01:28:50.340
en tus métodos, el pinche user service, ¿no?

01:28:50.820 --> 01:28:51.800
Que por ahí está.

01:28:51.860 --> 01:28:53.540
Aquí está el user service, el import.

01:28:53.840 --> 01:28:55.960
Todo en el tag de scripts.

01:28:56.500 --> 01:28:58.320
Y es lo que hace el pinche front.

01:28:59.220 --> 01:29:00.040
Sí, este.

01:29:00.980 --> 01:29:02.860
Y, bueno, el otro componente, el de registro,

01:29:02.860 --> 01:29:05.860
también está llamándose desde la vista de usuarios.

01:29:06.000 --> 01:29:09.080
Si te fijas, una cosa es login.

01:29:09.800 --> 01:29:14.240
Cuando inicio sesión por medio del submit del formulario.

01:29:14.920 --> 01:29:17.060
Este, este que es el users, no, este no es.

01:29:17.840 --> 01:29:19.020
Todo esto es en el login.

01:29:19.920 --> 01:29:23.520
O sea, en el login, yo le puedo decir este,

01:29:23.840 --> 01:29:24.640
iniciar sesión.

01:29:24.980 --> 01:29:28.280
Y me hace el submit del formulario de iniciar sesión

01:29:28.280 --> 01:29:28.760
de este.

01:29:29.220 --> 01:29:32.040
O puedo presionar click en el botón registrarse.

01:29:32.600 --> 01:29:34.680
Que es este, este de acá.

01:29:35.600 --> 01:29:37.720
Y lo que hace es registrarse.

01:29:38.020 --> 01:29:40.480
Aquí te dice que está mapeado, mapeado con el click,

01:29:40.760 --> 01:29:42.160
con el función register.

01:29:42.680 --> 01:29:44.840
Y esa función lo que hace es un window open.

01:29:45.240 --> 01:29:49.640
Abría una ruta que se llama register en otra pestaña.

01:29:49.880 --> 01:29:51.440
Por eso, por eso se lo puse así.

01:29:51.680 --> 01:29:52.960
Abre esto, haz esto.

01:29:53.460 --> 01:29:54.780
Ahí carga el componente, obviamente,

01:29:54.920 --> 01:29:55.660
pero no está arriba.

01:29:56.160 --> 01:29:59.100
Y ya, el componente de registro y al último es este.

01:29:59.100 --> 01:30:02.780
Y es un, igual un formulario.

01:30:03.040 --> 01:30:04.780
Nombre, email, password.

01:30:05.300 --> 01:30:07.600
Cuando tú le das en enviar el submit,

01:30:07.840 --> 01:30:12.260
igual manda a llamar un, este, a un fetch, a un usuario.

01:30:13.440 --> 01:30:15.260
Al verdad, digo al servicio de registro.

01:30:15.660 --> 01:30:18.540
Este no lleva token, no lleva ni madres, nada más.

01:30:18.560 --> 01:30:21.120
Paso la data que me mandaron y ya.

01:30:21.480 --> 01:30:22.020
Ahí está.

01:30:23.280 --> 01:30:24.840
Y ya, güey, esa es la función,

01:30:25.020 --> 01:30:27.240
los dos repositorios, el front y el back.

01:30:28.420 --> 01:30:30.280
No sé si tengas alguna duda.

01:30:31.540 --> 01:30:32.500
Ahí quedó.

01:30:32.960 --> 01:30:34.460
Ahí te respondí los dos, no?

01:30:34.460 --> 01:30:35.780
Tokens y versiones, va.

01:30:35.900 --> 01:30:36.880
Entonces, ¿qué más?

01:30:38.860 --> 01:30:39.640
Pues, ponte chido.

01:30:39.820 --> 01:30:41.300
Te digo, yo no creo que te pregunten de esto,

01:30:41.320 --> 01:30:42.960
pero, pues, ya llevas más ideas, ¿no?

01:30:44.480 --> 01:30:46.560
Oye, que, a ver, pruébalo aquí, ¿no?

01:30:46.560 --> 01:30:47.180
No, espérate.

01:30:47.220 --> 01:30:51.360
Pues, yo lo instalé en una máquina con una máquina

01:30:51.360 --> 01:30:51.760
virtual.

01:30:51.900 --> 01:30:55.500
Necesito mis imágenes, cómo me voy a conectar por SSH.

01:30:56.120 --> 01:31:00.440
Necesito toda esa información, no tengo tiempo.

01:31:02.180 --> 01:31:02.900
Correcto, correcto.

01:31:03.120 --> 01:31:04.660
Ahí está, güey, pues, ya.

01:31:05.820 --> 01:31:07.760
Ahí está, entonces, ya no te van a preguntar de esto.

01:31:07.880 --> 01:31:10.400
Pero, bueno, hiciste bien empaparte.

01:31:10.860 --> 01:31:11.760
Bueno, güey, pues, rífate.

01:31:12.780 --> 01:31:14.080
Vale, ahí andamos.

01:31:15.260 --> 01:31:16.300
Vale, vale, bye.