Ahora que hemos entendido la autenticación basada en token usando los tokens web JSON,
y también hemos entendido las ventajas de usar este enfoque.
El hecho de que ahora estamos construyendo un servidor basado en Rest API,
en este curso significa que
la autenticación basada en JSON Web Token
es la más adecuada para este servidor que estamos construyendo.
Por lo tanto, vamos a actualizar nuestro servidor Rest API para hacer uso de JSON Web Tokens en este ejercicio.
Para comenzar a actualizar el servidor en su terminal,
primero instalemos el JSON Web Token y el módulo Passport JWT Node.
Entonces, en el símbolo del sistema, escriba npm, instale,
pasaporte JWT JSON Web Token y menos guardar.
Como puede ver, estoy usando JSON Web Token 8.3.0 y pasaporte JWT 4.0.0 en este curso.
Ahora que hemos completado la instalación, sigamos adelante y actualicemos nuestro servidor express.
Pasando ahora a nuestro código,
agreguemos un archivo llamado
conflict.js en la carpeta raíz de nuestro proyecto.
Ahora, este archivo conflict.js voy a usarlo
para almacenar cierta información de configuración para nuestro servidor.
Ahora bien, esta es una forma de centralizar toda la configuración de nuestro servidor.
En este archivo conflict.js,
permítanme exportar un objeto JSON aquí.
Así que diremos, SecretKey,
y aquí es donde
especificaré la clave secreta que voy a usar para firmar mi JSON Web Token,
y también déjame especificar una URL Mongo aquí,
que será la URL de
mi servidor MongoDB localhost 27017.
Una vez que hayamos completado eso,
entonces iremos al archivo authenticate.js,
y en el archivo authenticate.js
ahora crearemos la estrategia JWT.
Esta es la estrategia de token web JSON que es proporcionada por
nuestro módulo de nodo JWT pasaporte que acabamos de incluir y por lo que diremos,
estrategia de generatividad pasaporte generativity.strategy.
Esto nos proporcionará
una estrategia basada en JSON Web Token para configurar nuestro módulo de pasaporte,
luego extraiga JWT, que
también obtendré del pasaporte JWT.
Vamos a requerir pasaporte JWT,
luego diremos «Extraer JWT».
Luego vamos a importar
el módulo JSON Web Token
que acabamos de instalar.
Una vez que hayamos importado estos
, vamos a empezar a configurar algunas cosas.
Junto con estos, permítanme importar la configuración que he
creado el archivo config.js que acabo de agregar a mi proyecto.
Una vez que complete esto, permítanme seguir adelante e
introducir algunas funciones adicionales que exportaré desde aquí.
Diremos, exports.getToken,
esta función cuando suministre un parámetro allí que simplemente llamaré usuario,
que será un objeto JSON,
esto creará el token y lo dará para nosotros.
Para crear el token, usaremos el módulo jsonwebtoken que acabamos de importar.
Entonces, aquí diremos return jwt.sign,
esto nos ayuda a crear el token web JSON y así dentro de eso
me permitirá suministrar la carga útil y
la carga útil aquí entra como el parámetro aquí llamado usuario,
y luego el segundo parámetro es
la clave secreta o privada que obtengo de config. clave secreta,
que acabo de configurar un poco antes.
Podemos suministrar opciones adicionales aquí.
Una opción que voy a suministrar a esto es...
Vale, déjame ir a la siguiente línea aquí,
la opción que voy a suministrar es Expiresina.
El Expiresina le dirá cuánto tiempo será
válido el jsonwebtoken, así que en este caso digo 3,600 lo que significa 3,600 segundos o aproximadamente una hora.
Una hora más tarde tendrá que renovar el jsonwebtoken.
Una hora es lo suficientemente larga para que podamos probar nuestra aplicación.
Puede configurar esto para que sea mucho más largo si lo decide.
En una aplicación real, puede establecer que esto sea un valor mucho más largo tal vez
unos días y esperar que el usuario vuelva a autenticarse cada pocos días.
Ahora, también vamos a configurar
la estrategia basada en jsonwebtoken para nuestra aplicación de pasaporte.
Entonces, déjenme declarar una variable llamada opts,
que no son más que las opciones que voy a especificar para mi estrategia basada en JWT.
Así que diremos opta por JWTFromRequest.
Ahora esta opción especifica
cómo se debe extraer el jsonwebtoken del mensaje de solicitud entrante.
Aquí es donde vamos a utilizar el extracto JWT.
Este extracto JWT admite varios métodos
para extraer información de la cabecera.
Dirá de AuthHeader de AuthHeader como token portador,
de encabezado qué esquema y así sucesivamente.
Si lee la documentación,
le dirá varias formas de extraer el jsonwebtoken.
Puede pasar el token en el cuerpo
del mensaje de solicitud entrante y luego puede extraerlo de allí,
también puede usar extractores personalizados, etc.
En este curso, voy a usar el método más simple llamado
desde el encabezado de autenticación como un token portador.
Ya estamos familiarizados con
el encabezado de autenticación porque ya hemos estado usando eso con
la autenticación básica y la autenticación basada en cookies anteriormente.
Por lo tanto, solo voy a usar
ese mismo campo de encabezado en el mensaje de solicitud para llevar el jsonwebtoken.
Así que diré opta como token portador jsonwebtoken.
El siguiente diremos opts.secretorkey,
este es el segundo parámetro que me ayuda a
proporcionar la clave secreta que voy a usar dentro de mi estrategia para el inicio de sesión.
Así que esa es la otra opción que voy a especificar aquí.
Una vez que esté especificando estos dos,
permítanme exportar la estrategia de Passport
que voy a configurar aquí, así que diremos ExportJWTPassport,
luego diríamos passport.use.
Recuerde la forma en que especificó la estrategia local anteriormente.
Aquí estamos especificando la estrategia basada en JWT,
luego vamos a crear una nueva estrategia JWT,
recordar que acabamos de importar la estrategia JWT
aquí que es lo que vamos a utilizar para crear una nueva estrategia.
Esta estrategia JWT toma
el objeto de opciones que acabo de crear como el primer parámetro.
Las opciones de estrategia y la segunda es la función de verificación que necesito suministrar,
y por lo tanto, la función de verificación la voy a suministrar en la siguiente línea aquí,
diremos FunctionJWT_PayLoad.
Hecho. Por lo tanto, cuando se llama a esta función,
el hecho es la devolución de llamada que proporciona el pasaporte.
Por lo tanto, cada vez que tenga pasaporte que está configurando con una nueva estrategia,
debe proporcionar el segundo parámetro hecho.
A través de este parámetro hecho,
pasará información al pasaporte que luego
usará para cargar cosas en el mensaje de solicitud.
Por lo tanto, cuando el pasaporte analiza el mensaje de solicitud,
utilizará la estrategia y luego extraerá información,
y luego la cargará en nuestro mensaje de solicitud.
Entonces, dado que esto es una función,
solo voy a usar una función de flecha aquí,
me han encantado las funciones de flecha.
Entonces, déjame crear eso como una función de flecha aquí,
y dentro de esta función,
vamos a definir la función.
Entonces, ¿qué hacemos dentro de la función?
Déjame hacer un console.log de
carga útil de JWT y luego
déjame cerrar la sesión de la opción que viene aquí,
la opción de carga útil JWT que viene aquí,
para que puedas ver lo que hay dentro de la carga útil de JWT.
Luego, buscaremos un usuario diciendo user.findone,
y luego sé que en jwt.payload,
hay un campo de ID que entra.
Entonces, eso es lo que voy a asignar como el campo ID aquí.
Entonces, diré, user.findone y el segundo
es una función de devolución de llamada.
Como te das cuenta, este método de mangosta usuario y tratas de encontrar.
Entonces, diremos si erran entonces, regresa hecho.
¿ Qué hace esto? Esto hecho es la devolución de llamada que el
pasaporte pasará a su estrategia aquí.
Por lo tanto, vamos a llamar a esta función hecha.
Esto hecho en pasaporte toma tres parámetros.
Por lo tanto, puede ver las tres piezas de información que este hecho espera que diga, error: cualquiera.
Por lo tanto, si tiene un error, lo pasará como el primer parámetro. ¿
El segundo parámetro, usuario? ,
Si existe un usuario,
entonces el valor del usuario se pasará y luego si hay alguna información? :, cualquiera.
Por lo tanto, estos dos son parámetros opcionales y, por lo tanto,
si pasa alguna información,
entonces se usará dentro de la aplicación.
Si paso falso como el segundo parámetro,
entonces eso significa que el usuario no existe o eso.
Por lo tanto, interpretará que el usuario no existe.
Así que, podría decir, errr,
falso, porque esto es un error.
Por lo tanto, no voy a pasar un valor de usuario allí,
solo voy a pasar en falso.
Allí, el siguiente,
podemos decir, si (usuario).
Entonces, si el usuario no es nulo,
diremos retorno hecho (nulo).
No hay error, por lo que el primer parámetro será
nulo y el segundo parámetro es el usuario,
pero acabamos de llegar del MongoDB.
De lo contrario, volveremos
hecho con nulo, falso.
Entonces, en el último caso,
no pudimos encontrar al usuario,
así que vamos a pasar en falso.
Así que vamos a manejarlo así.
Si lo desea, puede crear una nueva cuenta de usuario en este punto,
pero voy a mantener esto simple sólo para que sea fácil de entender para nosotros.
Así que, simplemente diremos, nulo, falso. Eso es seis.
Entonces, esta es la estrategia de pasaporte JSONWebToken que acabo de configurar aquí.
Además, permítanme exportar
una función más desde aquí llamada VerifyUser.
Ahora, esta función
verifyUser, voy a usarlo para verificar un usuario entrante.
Entonces, aquí es donde usaré passport.authenticate.
Entonces, el passport.authenticate, la estrategia es la estrategia jwt que acabo de configurar,
la estrategia JSONWebToken que acabo de configurar.
Entonces, la segunda parte,
diría yo, sesión: falsa.
Por lo tanto, eso significa que
no vamos a crear sesiones en este caso.
Como usted recuerda, una aplicación inversa,
estamos utilizando la autenticación basada en tokens.
Así que no vamos a crear sesiones.
Entonces, es por eso que configuré esta sesión de opciones en falsa aquí
, y por supuesto, la primera especificó la estrategia que voy a usar.
Entonces, para verificar a un usuario,
usaré la estrategia JWT.
¿ Cómo funciona la estrategia JWT?
En la solicitud entrante,
el token se incluirá en el encabezado de autenticación como vimos aquí.
Dijimos encabezado de autenticación como token portador.
Si eso está incluido, entonces eso se extraerá y se
usará para autenticar al usuario basado en el token.
Corrección menor aquí, esto debería ser user.findone_id es igual a jwt_payload. _id,
porque ese es el valor de id que está dentro de la carga útil de mi JSONWebToken.
Por lo tanto, estamos buscando al usuario con ese ID dado.
Entonces, una vez que hayamos completado esto, entonces ahora,
la segunda parte que tenemos que hacer es que necesitamos crear el token en algún lugar.
Ahora, ¿dónde creamos el token?
Entonces, aquí es donde algo que estamos haciendo en el archivo users.js es muy útil para nosotros.
En el archivo users.js,
recuerde que ya tiene este extremo llamado inicio de sesión.
En el extremo de inicio de sesión,
estaba usando el nombre de usuario y la contraseña para autenticar al usuario.
Por lo tanto, incluso con el JSONWebToken para emitir el JSONWebToken,
primero necesita autenticar al usuario usando una de las otras estrategias,
y si va a usar la estrategia local primero,
autenticaremos al usuario usando el nombre de usuario y la contraseña.
Una vez que el usuario se autentica con el nombre de usuario y
la contraseña, entonces emitiremos el token al usuario diciendo:
«Vale, eres un usuario válido,
te voy a dar el token».
Todas las solicitudes posteriores simplemente llevarán el token
en el encabezado del mensaje de solicitud entrante.
Entonces, antes, solíamos crear sesiones.
Cuando el usuario se autentica,
ya no vamos a usar sesiones.
En su lugar, cuando el usuario se autentica usando la estrategia local,
emitiremos un token al usuario.
Entonces, dentro de este método router.post que hemos hecho en ese endpoint /login,
voy a crear un token y pasar este token de vuelta al usuario.
Por lo tanto, aquí, vamos a decir un router.post.
Déjame crear un token.
Para crear un token,
tenemos esta función en el módulo de autenticación llamado Authenticate.getToken.
Así que, recordemos, que ya tenemos,
para hacer uso de eso, por supuesto,
incluso antes de empezar allí,
necesito importar la autenticación.
Módulo aquí. Por lo tanto, diremos que autenticar requiere. /authenticate.
Entonces, cuando en su código aquí,
ahora podemos decir Authenticate.getToken,
y el getToken toma el parámetro aquí.
Ahora, recuerde, retrocediendo el archivo authenticate.js.
El archivo authenticate.js toma un parámetro aquí
que se utilizará como carga útil cuando esté creando el JSONWebToken.
Entonces, en el archivo users.js,
voy a crear un token dando una carga útil,
que solo contiene el ID del usuario.
Entonces, diremos id: req.user. _id.
Eso es suficiente para crear el JSONWebToken.
No queremos incluir ninguna otra información del usuario.
Si lo decide, puede incluir otras partes de la información del usuario,
pero sugiero que mantenga el JSONWebToken pequeño.
El ID de usuario es suficiente porque si necesita buscar al usuario,
el ID de usuario es suficiente para buscar en MongoDB para el usuario.
Por lo tanto, solo voy a codificar solo el ID del usuario aquí.
Ahora, usted sabe que el req.user ya estaría presente,
porque cuando passport.authenticate ('local') autentica correctamente al usuario,
esto va a cargar la propiedad del usuario en el mensaje de solicitud.
Así que, por eso soy capaz de hacer esto aquí.
Entonces, esto es lo que usaré para crear el token.
Ahora, una vez que se crea el token,
quiero pasar este token de nuevo al usuario.
Entonces, en el objeto rest.json que estoy suministrando aquí,
ya estoy llevando el indicador verdadero de éxito y también,
un mensaje de estado aquí.
Permítanme agregar el token
como una de las propiedades en el mensaje de respuesta aquí.
Entonces, el token que acabo de crear,
pasaré esto como la segunda propiedad dentro de esta cadena Json aquí.
Así que ahora, cuando mi cliente recibe esta cadena Json en el cuerpo del mensaje de respuesta,
puede entrar y extraer el token desde allí.
Eso es todo. Por lo tanto, ahora hemos actualizado el archivo users.js,
y ahora puede ver cómo se
creará el token y se enviará de vuelta al usuario cuando el usuario se autentique correctamente.
Ahora, este esquema también se
puede utilizar cuando se utiliza la autenticación de terceros como la basada en OAuth 2.0,
que vamos a examinar en el siguiente módulo.
Ahora, el procedimiento será similar.
Estará creando un token cuando el usuario sea autenticado por
el proveedor de autenticación de terceros u OAuth,
y luego pasará el token de nuevo al usuario,
en un enfoque similar al que ve aquí.
Ahora, una vez que hayamos hecho esto,
entonces vamos al archivo app.js.
En el archivo app.js, porque hemos incluido un archivo de configuración aquí.
Entonces, permítanme requerir el archivo de configuración aquí,
y luego la URL que estoy usando aquí en lugar de codificar esta URL,
diré config.mongoURL.
Entonces, ahora, ve cómo mi archivo config.js se puede usar como
un lugar centralizado donde puedo preparar la configuración para mi aplicación.
Eso es todo. Entonces, lo que sucede ahora es que cuando el usuario se
autentica en el endpoint /login y el usuario se autentica correctamente,
entonces el token será creado por el servidor y enviado de vuelta al cliente o al usuario.
Por lo tanto, el cliente incluirá el token en
cada solicitud entrante posterior en el encabezado de autorización.
Ahora, ¿cómo incluye el encabezado de autorización?
Volvamos a authentic.js y aquí,
ves que dijimos ExtractJWT.FromAuthHeaderasBearerToken aquí.
Por lo tanto, esto se incluirá en el encabezado de autenticación como un token portador.
Te mostraré cómo se hace esto,
luego usamos cartero para incluir el token del portador en el encabezado de autenticación.
Ahora, cuando esto llegue
, recuerde que justo aquí abajo,
ha configurado este método aquí llamado VerifyUser,
que llama al pasaporte autenticarse con JWT.
Por lo tanto, este usa el token que
viene en el encabezado de autenticación y luego verifica al usuario.
Por lo tanto, cada vez que quiero verificar la autenticidad del usuario,
simplemente puedo llamar a verificar usuario,
y eso iniciará la llamada al passport.authenticate y verificará el sser.
Si esto tiene éxito
, me permitirá proceder.
Este procedimiento es muy similar a lo que ha hecho en el
archivo users.js donde llama al mismo passport.authenticate ('local').
Entonces, si esto es exitoso,
entonces avanza.
Si falla, la función de autenticación devolverá el mensaje de error
al cliente diciendo que el usuario no está autorizado.
Por lo tanto, eso ya está atendido.
Así que ahora, que hemos incluido esto en mi archivo authenticate.js, en
cualquier lugar donde quiero verificar al usuario,
simplemente puedo llamar a
esta función verifyUser que
he especificado aquí o a la exportación que he especificado aquí, a la
que llamaremos al passport.authenticate usando
la estrategia JWT para autenticar al usuario.
Ahora, ¿cómo hacemos uso de esto?
Ahora, lo que vamos a hacer es entrar en todos y cada uno de nuestros routers,
y controlar las opciones en todas las rutas que queremos controlar.
Entonces, volviendo al archivo app.js, ahora,
que no estamos usando sesiones, voy a eliminar esta sesión de aquí,
porque ya no estamos usando sesiones.
Del mismo modo, voy a eliminar este passport.session de aquí también.
Eso tampoco es necesario.
Además, esta autenticación, vea anteriormente,
cuando configuré esta autenticación,
esta autenticación se aplicó a cada solicitud entrante individual.
Ahora, voy a cambiar mi aplicación,
por lo que requeriré autenticación solo en ciertas rutas y no en todas las rutas.
Por lo tanto, permítanme eliminar esta autenticación por completo de app.js.
Entonces, ahora, cuando llegue la solicitud,
si está en/endpoint,
se servirá el índice.
Si está en el endpoint /users, le permitirá navegar a
las distintas rutas que están montadas en el /users en users.js
y, posteriormente, el resto de las.
Lo que voy a hacer ahora es dejar
la carpeta pública abierta para que cualquiera pueda acceder.
Ahora, en muchas aplicaciones,
esto puede estar bien.
Así que, voy a dejar eso abierto.
Ahora, en los platos,
promociones, y el punto final de los líderes,
todas las solicitudes de conseguir.
Dejaré que se respondan sin necesidad de autenticación.
Ahora, ¿por qué querría hacer eso?
Si un usuario está haciendo una solicitud get,
el usuario solo quiere recuperar información.
Entonces, por ejemplo, en el lado del cliente, si estoy implementando una aplicación web usando Angular
o una aplicación cliente usando
un script iónico o nativo, entonces tal vez quiera implementar mi aplicación de tal manera que la página principal ya muestre información,
la información genética que desea poner a disposición de cualquier persona que
visite su sitio web o que abra su aplicación.
Por lo tanto, la información básica se puede mostrar allí.
Pero si desea cambiar algo,
entonces espera que el usuario sea autenticado.
Por lo tanto, permitirá que las operaciones POST, las operaciones de poner
y las operaciones de eliminación sean realizadas solo por usuarios autenticados.
Del mismo modo, para comentarios, por ejemplo,
puede decir que los comentarios solo pueden ser publicados o modificados por usuarios autenticados.
Por lo tanto, puede restringir solo algunas rutas para usuarios autenticados,
la otra ruta puede dejarlos abiertos. ¿Cómo hacemos eso?
Ahora es aquí donde el usuario de verificación que
hemos exportado desde el archivo authenticate.js es útil.
Ahora en lugar de controlar todos los puntos finales,
todas las diversas operaciones en los platos, promociones
y líderes en puntos,
abriremos solo las operaciones get para cualquiera,
pero las
operaciones de publicación, puesta y eliminación estarán restringidas solo a usuarios autenticados.
En la asignación, agregará una categoría más de usuarios llamada usuarios admin.
Ahora restringiría ciertas operaciones para que solo los usuarios administradores realicen.
Entonces, por ejemplo, modificar los platos
o eliminar la información de los platos de la base de datos,
se restringirá solo a los usuarios administradores.
Pero los usuarios básicos pueden publicar comentarios,
modificar los comentarios que han publicado
y tal vez incluso guardar algunos platos favoritos.
Haremos esa parte en el cuarto módulo.
Ahora, ¿cómo controlamos rutas específicas?
Así que aquí es donde tenemos que entrar en cada uno de los routers
y luego importar controles en rutas específicas.
Entonces, comencemos con la ruta de los platos.
Entonces, para la ruta de platos,
recordará que esto está controlado en el archivo dishRouter.js.
Entonces, yendo a dishRouter.js,
primero importemos la autenticación aquí.
Así que diremos, const authenticate
require../authenticate porque este
archivo authenticator.js está en la carpeta de nivel superior.
Por lo tanto, recuerda../autenticar aquí.
Por lo tanto, una vez que importe la autenticación,
para la ruta del enrutador de plato para esta ruta
, la operación get, voy a permitir sin ningún problema.
Así que, eso está abierto.
Así que no voy a imponer ninguna restricción.
Desde la publicación, si queremos aplicar varios middleware,
simplemente podemos agregar el principal dentro de este uno detrás del otro.
Ahora, cuando se llama a la publicación, en este
momento simplemente está ejecutando esta función aquí.
Ahora, justo antes de eso,
puedo entrar y decir, autenticate.verifyUser, allí.
Entonces, ¿qué hace esto?
Esto dice que si entra una solicitud de publicación,
primero ejecutaría este middleware,
que he exportado desde el archivo authentic.js,
primero lo aplico,
lo que es equivalente a decir que el pasaporte autentica JWT y está verificando el usuario.
Entonces, si esto es exitoso,
entonces pasaré a hacer el resto.
Si la autenticación falla en este punto,
entonces la autenticación de pasaporte
responderá al cliente con el mensaje de error correspondiente.
Así que eso ya está manejado por autenticación de pasaporte,
así que no tengo que preocuparme nada más allá de ese punto.
Si he cruzado este middleware y luego puedo
ejecutar la siguiente función que significa que mi autenticación fue exitosa,
así que puedo continuar desde este punto.
Por lo tanto, esto está actuando como la barrera para este método post.
Ahora usando el mismo argumento,
simplemente puedo aplicar este middleware particular a todos los otros métodos.
Puedo hacerle eso al puesto.
Aunque en este caso,
poner no va a hacer nada.
Pero en cualquier caso,
lo haré simplemente por el bien de la uniformidad,
aplicaré el usuario de verificación para poner también y, por supuesto,
para eliminar también, voy a aplicar put.
Del mismo modo, bajando al /DISHID,
obtengo permitiré que funcione sin ningún problema.
Publicar, aplicaré el usuario de verificación.
Ponga también aplicaré el usuario de verificación y para eliminar también lo mismo.
Para el /dishid/comments, voy a dejar el get open,
está bien que alguien recupere comentarios sobre un plato específico.
Publicar, voy a cerrar esto,
por lo que solo los usuarios verificados pueden publicar comentarios.
Ponga también cerraré esto y eliminaré también.
Tienes que ir un paso más allá y decir:
«Solo los usuarios que han publicado el comentario pueden eliminar sus propias publicaciones».
Pero lo haremos en el siguiente módulo.
Por el momento, voy a decir,
«Vale, un usuario verificado puede eliminar cualquier comentario».
Esto, por supuesto, no es cierto,
podemos poner un control adicional,
pero vamos a hacer eso en el siguiente módulo de este curso.
Entonces, para eliminar también aplico lo mismo.
Una vez más, para los comentarios/comentarios del enrutador de platos Id,
obtenga lo dejaré abierto.
Post, lo dejaré cerrado.
Ponga también ciérrelo y luego para eliminar también cerraré esto.
Eliminar, por supuesto, como dije,
la operación de eliminación debe permitirse solo
a un usuario que haya creado el comentario se
le debe pedir que elimine eso, pero necesita configurar algunas cosas adicionales para que funcione correctamente, lo
cual haremos en el siguiente módulo.
Por el momento, estamos diciendo que un usuario verificado puede eliminar un comentario específico, eso es todo.
Ahora aplicaremos el mismo principio al enrutador promocional y también al enrutador líder.
Entonces, al entrar en el enrutador promocional,
déjame importar autenticar
y luego obtener está abierto,
así que este es el enrutador líder.
Por lo tanto, conseguir está abierto.
Publicar, voy a controlar eso,
poner, controlar, eliminar, controlar,
enrutador líder, ID de líder,
obtener está bien, publicar,
controlar, poner es controlado y eliminar está controlado.
Lo mismo con el router promocional.
Permítanme, requiera la autenticación
y luego para la ruta get está abierta,
POST está controlado, put está controlado,
delete está controlado, lo mismo para el Promorouter/promoid.
Get está abierto, POST está controlado,
poner y eliminar también están controlados, eso es todo.
Vamos a guardar todos los cambios.
Por lo tanto, una vez que
completemos todos los cambios, guardemos los cambios.
Ahora, nuestra aplicación está lista para ser probada.
Por lo tanto, vamos a reiniciar nuestro servidor,
o si el servidor no se está ejecutando,
simplemente iniciaremos el servidor.
Al ir al terminal,
mi servidor no se está ejecutando.
Por lo tanto, permítanme iniciar el servidor escribiendo npm start.
Curiosamente, solo arrojó un error aquí,
solo quería ilustrarte que incluso yo puedo cometer errores,
por lo que verá que hay un error aquí que dice:
«No se puede encontrar module.authenticate», y luego si miro a través del código,
descubro que este problema ocurrió en el,
¿Dónde ocurrió?
Entonces, solo busco aquí,
y luego en algún lugar aquí abajo,
noté que este problema ocurrió dentro de mi archivo users.js.
Entonces, justo ahí, dice,
esto está en el archivo users.js.
Entonces, yendo al archivo users.js, arreglemos eso.
Ir al archivo users.js,
justo en la parte superior cuando requería autenticarse, dije,
«.authenticate», y como te estaba diciendo,
eso debería ser un punto punto porque está en la carpeta superior.
Este archivo users.js en la carpeta Rutas,
y autenticar está en la carpeta Ruta de proyectos, por lo que debe ser punto de autenticación.
Por lo tanto, si cometes errores,
ahí tienes, así es como te recordarán el error que has introducido.
Por lo tanto, guardemos los cambios y luego reiniciemos nuestro servidor.
Una vez más, volviendo a ese terminal,
permítanme iniciar mi servidor y mi servidor ahora está en funcionamiento,
vayamos a Postman y luego probemos nuestra aplicación.
Ahora, en Postman, primero intentaré hacer
un GET en localhost: 3000/platos y luego cuando hago un GET,
es exitoso porque el punto final GET no está controlado.
Así que puedo hacer un GET en los platos,
puedo hacer un GET en las promociones,
y todo funciona muy bien.
Pero si trato de hacer un POST en los platos,
así que déjame encontrar donde he hecho un POST en los platos.
Aquí he hecho una POST en los platos.
Entonces, cuando traté de hacer una POST en los platos,
inmediatamente dice no autorizado.
Así que mi módulo de Passport se ha dado cuenta de que no estoy autorizado, así que no se me permite hacer esto,
así que eso es lo que me está recordando.
Permítanme limpiar las cookies de,
en caso de que encuentre una cookie en su Cartero simplemente elimine la cookie
correspondiente al localhost porque
esa cookie ya no es necesaria y no será necesaria.
Por lo tanto, incluso si elimino la cookie y luego POST,
seguirá diciendo no autorizado.
Por lo tanto, no estoy autorizado para hacer estas operaciones.
Por lo tanto, tengo que iniciar sesión.
Ahora, si ha realizado el ejercicio anterior,
habría dejado el usuario al que se registró anteriormente.
Entonces, por ejemplo, habrías registrado a este usuario en particular en el ejercicio anterior,
permítanme intentar registrar el mismo usuario nuevamente y
mi servidor debería quejarse diciendo UserExistsError para que eso significa que el usuario existe,
por lo que no necesito registrarme de nuevo.
Si ha eliminado al usuario de su MongoDB,
simplemente regístrese a ese usuario una vez más y luego vamos a iniciar sesión.
Por lo tanto, enviaremos una solicitud de inicio de sesión a ese punto final.
Por lo tanto, cuando envío la solicitud de inicio de sesión haciendo una POST al usuario final,
observe lo que devuelve mi servidor.
Inmediatamente nota que en el mensaje de respuesta
junto con el indicador de éxito y el mensaje de estado,
también obtiene un token aquí.
Ahora, este token en particular,
necesito copiar este token,
porque en mis solicitudes posteriores,
necesitaré incluir este token.
Entonces, déjame ir a la versión cruda de esto y que voy a copiar este token.
Este token no es más que una cadena larga allí,
así que permítanme copiar este token.
Entonces ahora, si tiene curiosidad sobre lo que está contenido en este token,
se puede examinar el token web JSON.
Hay un sitio en particular donde puede entrar y escribir
su JSON Web Token y luego realmente verificar lo que está dentro del JSON Web Token.
Hagámoslo como el siguiente paso.
En una ventana del navegador,
simplemente escriba jwt.io y esto lo llevará a este sitio llamado JSON Web Token jwt.io.
Si recuerdas, en la conferencia,
te había mostrado la estructura del token web JSON
y te había mostrado que el token web JSON contiene tres partes: el encabezado,
la carga útil y la información allí.
Ahora, en este caso,
la información está aquí, así que voy
a pegar mi JSON Web Token en este lado izquierdo,
así que déjame seleccionar eso y luego pegar mi JSON Web Token en
el lado izquierdo en la parte codificada y luego en el lado derecho,
te muestra exactamente lo que es dentro del token web JSON que acabo de crear.
Por lo tanto, dice que el encabezado contiene estas dos piezas de información.
El aviso de carga útil que contiene el ID
del usuario y luego la firma en la parte inferior aquí.
Entonces, esto es lo que está contenido dentro de mi JSON Web Token.
Volviendo a Cartero,
déjame ahora tratar de conseguir los platos.
Entonces, cuando digo GET localhost: 3000/platos,
todavía devolverá una cadena vacía,
matriz vacía aquí porque mi base de datos no la contiene.
Entonces, déjame POST un plato en mi base de datos.
Entonces, voy a elegir la operación POST y en el cuerpo,
ves que tengo mi plato aquí.
En el encabezado, voy a agregar el nuevo encabezado llamado
autorización y recuerdas que antes para la autorización básica,
dijiste básico y luego tenías la cadena codificada Base 64 allí.
Si desea incluir su JSON Web Token en el encabezado de autorización,
porque en nuestro código,
dijimos autorización como token portador.
Por lo tanto, si desea incluir el token en el encabezado de autorización,
en la autorización diremos portador y luego pegaremos
esa cadena de token que acabamos de copiar de nuestra solicitud entrante.
Por lo tanto, pegaremos la cadena de token allí.
Entonces, esto es lo que estará contenido en
el encabezado de autorización de mi solicitud saliente aquí,
solicitud POST saliente aquí.
Así que note, el lado izquierdo dice portador y el lado derecho es la cadena,
el token que acabo de copiar desde
el punto en el que inicié sesión y luego déjame enviar el mensaje POST
ahora y mi POST ahora es exitoso y esto se publica en mi base de datos.
Ahora, si quieres estar seguro de que se ha publicado,
vamos a hacer un GET y cuando hagas un GET,
puedes ver que de hecho ese plato se ha insertado en mi base de datos como se muestra aquí.
Entonces, así es como va a hacer uso de JSON Web Tokens en su aplicación.
Por lo tanto, siempre que necesite hacer una
operación POST, PUT o DELETE en cualquiera de los puntos finales,
estaría adjuntando.
Por lo tanto, permítanme volver a esta solicitud POST aquí.
En el encabezado, colocará
este campo de autorización y luego esto se incluiría en la autorización,
lo iniciará con portador y luego la cadena token,
después de ese espacio del portador,
un solo espacio y luego la cadena token después de eso.
Entonces, así es como sus mensajes de solicitud
llevarían el token web JSON en el encabezado del mensaje de solicitud saliente.
También puede incluir el token en el cuerpo del mensaje de solicitud saliente.
Ahora, para eso, tendrá que configurar
su servidor express especialmente el JWT extra en el
archivo authenticate.js para aceptarlo
del cuerpo para que recuerde que allí hemos visto que
el JWT extra admite muchas formas diferentes de extraer
el token web JSON de la entrada solicitud.
Por lo tanto, allí debe especificar,
si va a incluirlo en el cuerpo,
debe especificar esa información allí.
Ahora, los detalles de cómo hacerlo se puede consultar
la documentación del módulo Passport JWT para entender cómo se hace esto.
En este curso, simplemente lo usaré en el encabezado de autorización
como he mostrado aquí y esto funciona bien para la mayoría de los casos.
Ahora, si está desarrollando una aplicación web,
una aplicación angular o una aplicación Ionic o NativeScript,
debe poder configurar
esa aplicación mediante la cual el token web JSON se incluirá en el encabezado de autorización.
En la última lección de este curso,
te mostraré cómo integrar el cliente y el servidor,
el cliente que has desarrollado en los cursos anteriores con
el servidor que desarrollamos en este curso.
Con esto, completamos este ejercicio.
En este ejercicio, hemos visto cómo
podemos configurar nuestra aplicación para usar JSON Web Tokens,
y hemos visto cómo manejamos la autenticación del usuario usando el token web JSON,
usando el soporte del módulo Passport y el módulo Passport JWT,
y los módulos JSON Web Token Node.
Con esto, completamos este ejercicio.
Este es un buen momento para que hagas un Git Commit con el mensaje Passport JWT.