You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/4/es/part4d.md
+64-39Lines changed: 64 additions & 39 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -274,17 +274,17 @@ Implementaremos el inicio de sesión en la interfaz en la [siguiente parte](/es/
274
274
275
275
<divclass="tasks">
276
276
277
-
### Ejercicios 4.15.-4.22.
277
+
### Ejercicios 4.15.-4.23.
278
278
279
-
En los próximos ejercicios, se implementarán los conceptos básicos de la gestión de usuarios para la aplicación Bloglist. La forma más segura es seguir la historia desde el capítulo de la parte 4 [Administración de usuarios](/es/part4/user_administration) hasta el capítulo [Autenticación basada en token](/es/part4/token_authentication). Por supuesto, también puede utilizar su creatividad.
279
+
En los próximos ejercicios, se implementarán los conceptos básicos de la gestión de usuarios para la aplicación Bloglist. La forma más segura es seguir la historia desde el capítulo de la parte 4 [Administración de usuarios](/es/part4/administracion_de_usuarios) hasta el capítulo [Autenticación basada en token](/es/part4/autenticacion_de_token). Por supuesto, también puede utilizar su creatividad.
280
280
281
281
**Una advertencia más:** Si nota que está mezclando llamadas async/await y _then_, es 99% seguro que está haciendo algo mal. Utilice uno u otro, nunca ambos.
282
282
283
283
#### 4.15: expansión de la lista de blogs, paso 3
284
284
285
285
Implemente una forma de crear nuevos usuarios realizando una solicitud POST HTTP para la dirección <i>api/users</i>. Los usuarios tienen <i>nombre de usuario, contraseña y nombre</i>.
286
286
287
-
No guarde las contraseñas en la base de datos como texto sin cifrar, utilice la biblioteca <i>bcrypt</i> como hicimos en el capítulo de la parte 4 [Creación de nuevos usuarios](/es/part4/user_administration#creation-users).
287
+
No guarde las contraseñas en la base de datos como texto sin cifrar, utilice la biblioteca <i>bcrypt</i> como hicimos en el capítulo de la parte 4 [Creación de nuevos usuarios](/es/part4/administracion_de_usuarios#creando-usuarios).
288
288
289
289
**NB** Algunos usuarios de Windows han tenido problemas con <i>bcrypt</i>. Si tiene problemas, elimine la librería con el comando
290
290
@@ -306,15 +306,15 @@ Agrega una función que agrega las siguientes restricciones para la creación de
306
306
307
307
La operación debe responder con un código de estado adecuado y algún tipo de mensaje de error si se crea un usuario no válido.
308
308
309
-
**NB** No pruebe las restricciones de contraseña con las validaciones de Mongoose. No es una buena idea porque la contraseña recibida por el backend y el hash de contraseña guardado en la base de datos no son lo mismo. La longitud de la contraseña debe validarse en el controlador como hicimos en la [parte 3](/es/part3/validation_and_es_lint) antes de usar la validación de Mongoose.
309
+
**NB** No pruebe las restricciones de contraseña con las validaciones de Mongoose. No es una buena idea porque la contraseña recibida por el backend y el hash de contraseña guardado en la base de datos no son lo mismo. La longitud de la contraseña debe validarse en el controlador como hicimos en la [parte 3](/es/part3/validacion_y_es_lint) antes de usar la validación de Mongoose.
310
310
311
311
Además, implemente pruebas que verifiquen que no se creen usuarios no válidos y que la operación de agregar usuario no válida devuelva un código de estado adecuado y un mensaje de error.
312
312
313
313
#### 4.17: expansión de la lista de blogs, paso 5
314
314
315
315
Expande los blogs para que cada blog contenga información sobre el creador del blog.
316
316
317
-
Modifique la adición de nuevos blogs para que cuando se cree un nuevo blog, <i>cualquier</i> usuario de la base de datos sea designado como su creador (por ejemplo, el que se encontró primero). Implemente esto de acuerdo con el capítulo de la parte 4 [poblar](/es/part4/user_administration#populate).
317
+
Modifique la adición de nuevos blogs para que cuando se cree un nuevo blog, <i>cualquier</i> usuario de la base de datos sea designado como su creador (por ejemplo, el que se encontró primero). Implemente esto de acuerdo con el capítulo de la parte 4 [poblar](/administracion_de_usuarios#poblar).
318
318
El usuario designado como creador no importa todavía. La funcionalidad se termina en el ejercicio 4.19.
319
319
320
320
Modificar la lista de todos los blogs para que la información de usuario del creador se muestre con el blog:
@@ -327,25 +327,25 @@ y la lista de todos los usuarios también muestra los blogs creados por cada usu
327
327
328
328
#### 4.18: expansión de la lista de blogs, paso 6
329
329
330
-
Implementar la autenticación basada en token según la parte 4 capítulo [Autenticación de token](/es/part4/token_authentication).
330
+
Implementar la autenticación basada en token según la parte 4 [Autenticación de token](/es/part4/autenticacion_de_token).
331
331
332
332
#### 4.19: expansión de la lista de blogs , paso 7
333
333
334
334
Modificar la adición de nuevos blogs para que solo sea posible si se envía un token válido con la solicitud HTTP POST. El usuario identificado por el token se designa como el creador del blog.
335
335
336
336
#### 4.20*: expansión de la lista de blogs, paso 8
337
337
338
-
[Este ejemplo](/es/part4/token_authentication) de la parte 4 muestra cómo tomar el token del encabezado con la función auxiliar _getTokenFrom_.
338
+
[Este ejemplo](/es/part4/autenticacion_de_token) de la parte 4 muestra cómo tomar el token del encabezado con la función auxiliar _getTokenFrom_.
339
339
340
-
Si usó la misma solución, refactorice llevando el token a un [middleware](/es/part3/node_js_and_express#middleware). El middleware debe tomar el token del encabezado <i>Authorization</i> y colocarlo en el campo <i>token</i> del objeto <i>request</i>.
340
+
Si usó la misma solución, refactorice llevando el token a un [middleware](/es/part3/node_js_y_express#middleware). El middleware debe tomar el token del encabezado <i>Authorization</i> y colocarlo en el campo <i>token</i> del objeto <i>request</i>.
341
341
342
342
En otras palabras, si registra este middleware en el archivo <i>app.js</i> antes de todas las rutas
343
343
344
344
```js
345
345
app.use(middleware.tokenExtractor)
346
346
```
347
347
348
-
routes can access the token with_request.token_:
348
+
Las rutas pueden acceder al token con_request.token_:
Recuerde que un [middleware] normal (/es/part3/node_js_and_express#middleware) es una función con tres parámetros, que al final llama al último parámetro <i>next</i> para mover el control al siguiente middleware:
357
+
Recuerde que una [función middleware](/es/part3/node_js_y_express#middleware) es una función con tres parámetros, que al final llama al último parámetro <i>next</i> para mover el control al siguiente middleware:
#### 4.22*: expansión de la lista de blogs, paso 10
386
386
387
+
Tanto la creación de un nuevo blog como su eliminación necesitan averiguar la identidad del usuario que está realizando la operación. El middleware _tokenExtractor_ que hicimos en el ejercicio 4.20 ayuda, pero los controladores de las operaciones <i>post</i> y <i>delete</i> necesitan averiguar quién es el usuario que posee un token específico.
388
+
389
+
Ahora cree un nuevo middleware _userExtractor_, que encuentre al usuario y lo establezca en el objeto de solicitud. Cuando registra el middleware en <i>app.js</i>
390
+
391
+
```js
392
+
app.use(middleware.userExtractor)
393
+
```
394
+
395
+
el usuario se configurará en el campo _request.user_:
Tenga en cuenta que es posible registrar un middleware solo para un conjunto específico de rutas. Entonces, en lugar de usar _userExtractor_ con todas las rutas,
412
+
413
+
```js
414
+
// use the middleware in all routes
415
+
app.use(userExtractor) // highlight-line
416
+
417
+
app.use('/api/blogs', blogsRouter)
418
+
app.use('/api/users', usersRouter)
419
+
app.use('/api/login', loginRouter)
420
+
```
421
+
422
+
podríamos registrarlo para que solo se ejecute con rutas de ruta <i>/api/blogs</i>:
Como puede verse, esto se ouede realizar al encadenar múltiples middlewares como parámetro de la función <i>use</i>. También sería posible registrar un middleware solo para una operación específica:
#### 4.23*: expansión de la lista de blogs, paso 11
440
+
387
441
Después de agregar la autenticación basada en token, las pruebas para agregar un nuevo blog se rompió. Arregle las pruebas. También escriba una nueva prueba para asegurarse de que la adición de un blog falla con el código de estado adecuado <i>401 Unauthorized</i> si no se proporciona un token.
388
442
389
443
[Esto](https://github.com/visionmedia/supertest/issues/398) probablemente sea útil al hacer la corrección.
390
444
391
445
Este es el último ejercicio de esta parte del curso y es hora de enviar su código a GitHub y marcar todos sus ejercicios terminados en el [sistema de envío de ejercicios](https://studies.cs.helsinki.fi/stats/courses/fullstackopen).
392
446
393
-
<!---
394
-
note left of user
395
-
user fills in login form with
396
-
username and password
397
-
end note
398
-
user -> browser: login button pressed
399
-
400
-
browser -> backend: HTTP POST /api/login { username, password }
401
-
note left of backend
402
-
backend generates TOKEN that identifies user
403
-
end note
404
-
backend -> browser: TOKEN returned as message body
405
-
note left of browser
406
-
browser saves TOKEN
407
-
end note
408
-
note left of user
409
-
user creates a note
410
-
end note
411
-
user -> browser: create note button pressed
412
-
browser -> backend: HTTP POST /api/notes { content } TOKEN in header
0 commit comments