Skip to content

Commit 5dff6e7

Browse files
authored
Merge pull request #2634 from vlondonoma/patch-10
Update Spanish part4d.md
2 parents 5428d2c + fd7d700 commit 5dff6e7

File tree

1 file changed

+64
-39
lines changed

1 file changed

+64
-39
lines changed

src/content/4/es/part4d.md

Lines changed: 64 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -274,17 +274,17 @@ Implementaremos el inicio de sesión en la interfaz en la [siguiente parte](/es/
274274

275275
<div class="tasks">
276276

277-
### Ejercicios 4.15.-4.22.
277+
### Ejercicios 4.15.-4.23.
278278

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.
280280

281281
**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.
282282

283283
#### 4.15: expansión de la lista de blogs, paso 3
284284

285285
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>.
286286

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).
288288

289289
**NB** Algunos usuarios de Windows han tenido problemas con <i>bcrypt</i>. Si tiene problemas, elimine la librería con el comando
290290

@@ -306,15 +306,15 @@ Agrega una función que agrega las siguientes restricciones para la creación de
306306

307307
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.
308308

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.
310310

311311
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.
312312

313313
#### 4.17: expansión de la lista de blogs, paso 5
314314

315315
Expande los blogs para que cada blog contenga información sobre el creador del blog.
316316

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).
318318
El usuario designado como creador no importa todavía. La funcionalidad se termina en el ejercicio 4.19.
319319

320320
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
327327

328328
#### 4.18: expansión de la lista de blogs, paso 6
329329

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).
331331

332332
#### 4.19: expansión de la lista de blogs , paso 7
333333

334334
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.
335335

336336
#### 4.20*: expansión de la lista de blogs, paso 8
337337

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_.
339339

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>.
341341

342342
En otras palabras, si registra este middleware en el archivo <i>app.js</i> antes de todas las rutas
343343

344344
```js
345345
app.use(middleware.tokenExtractor)
346346
```
347347

348-
routes can access the token with _request.token_:
348+
Las rutas pueden acceder al token con _request.token_:
349349
```js
350350
blogsRouter.post('/', async (request, response) => {
351351
// ..
@@ -354,7 +354,7 @@ blogsRouter.post('/', async (request, response) => {
354354
})
355355
```
356356

357-
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:
358358

359359
```js
360360
const tokenExtractor = (request, response, next) => {
@@ -384,39 +384,64 @@ if ( blog.user.toString() === userid.toString() ) ...
384384

385385
#### 4.22*: expansión de la lista de blogs, paso 10
386386

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_:
396+
397+
```js
398+
blogsRouter.post('/', async (request, response) => {
399+
// get user from request object
400+
const user = request.user
401+
// ..
402+
})
403+
404+
blogsRouter.delete('/:id', async (request, response) => {
405+
// get user from request object
406+
const user = request.user
407+
// ..
408+
})
409+
```
410+
411+
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>:
423+
424+
```js
425+
// use the middleware only in /api/blogs routes
426+
app.use('/api/blogs', userExtractor, blogsRouter) // highlight-line
427+
app.use('/api/users', usersRouter)
428+
app.use('/api/login', loginRouter)
429+
```
430+
431+
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:
432+
433+
```js
434+
router.post('/', userExtractor, async (request, response) => {
435+
// ...
436+
}
437+
```
438+
439+
#### 4.23*: expansión de la lista de blogs, paso 11
440+
387441
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.
388442
389443
[Esto](https://github.com/visionmedia/supertest/issues/398) probablemente sea útil al hacer la corrección.
390444
391445
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).
392446
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
413-
note left of backend
414-
backend identifies userfrom the TOKEN
415-
end note
416-
417-
backend -> browser: 201 created
418-
419-
user -> user:
420-
-->
421-
422447
</div>

0 commit comments

Comments
 (0)