Skip to content

Commit ea063de

Browse files
committed
Fix exercise 4.22 to match with part 5 expectations
1 parent 590cd67 commit ea063de

File tree

2 files changed

+19
-36
lines changed

2 files changed

+19
-36
lines changed

src/content/4/en/part4d.md

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -474,34 +474,25 @@ if ( blog.user.toString() === userid.toString() ) ...
474474

475475
Both the new blog creation and blog deletion need to find out the identity of the user who is doing the operation. The middleware _tokenExtractor_ that we did in exercise 4.20 helps but still both the handlers of <i>post</i> and <i>delete</i> operations need to find out who the user holding a specific token is.
476476

477-
Now create a new middleware _userExtractor_, that finds out the user and sets it to the request object. When you register the middleware in <i>app.js</i>
477+
Now create a new middleware called userExtractor that identifies the user related to the request and attaches it to the request object. After registering the middleware, the post and delete handlers should be able to access the user directly by referencing request.user:
478478

479479
```js
480-
app.use(middleware.userExtractor)
481-
```
482-
483-
the user will be set in the field _request.user_:
484-
485-
```js
486-
blogsRouter.post('/', async (request, response) => {
480+
blogsRouter.post('/', userExtractor, async (request, response) => {
487481
// get user from request object
488482
const user = request.user
489483
// ..
490484
})
491485

492-
blogsRouter.delete('/:id', async (request, response) => {
486+
blogsRouter.delete('/:id', userExtractor, async (request, response) => {
493487
// get user from request object
494488
const user = request.user
495489
// ..
496490
})
497491
```
498492

499-
Note that it is possible to register a middleware only for a specific set of routes. So instead of using _userExtractor_ with all the routes,
493+
Note that in this case, the userExtractor middleware has been registered with individual routes, so it is only executed in certain cases. So instead of using _userExtractor_ with all the routes,
500494

501495
```js
502-
const middleware = require('../utils/middleware');
503-
// ...
504-
505496
// use the middleware in all routes
506497
app.use(middleware.userExtractor) // highlight-line
507498

@@ -513,26 +504,22 @@ app.use('/api/login', loginRouter)
513504
we could register it to be only executed with path <i>/api/blogs</i> routes:
514505

515506
```js
516-
const middleware = require('../utils/middleware');
517-
// ...
518-
519507
// use the middleware only in /api/blogs routes
520508
app.use('/api/blogs', middleware.userExtractor, blogsRouter) // highlight-line
521509
app.use('/api/users', usersRouter)
522510
app.use('/api/login', loginRouter)
523511
```
524512

525-
As can be seen, this happens by chaining multiple middlewares as the arguments of the function <i>use</i>. It would also be possible to register a middleware only for a specific operation:
513+
This is done by chaining multiple middleware functions as parameters to the <i>use</i> function. In the same way, middleware can also be registered only for individual routes:
526514

527515
```js
528-
const middleware = require('../utils/middleware');
529-
// ...
530-
531-
router.post('/', middleware.userExtractor, async (request, response) => {
516+
router.post('/', userExtractor, async (request, response) => {
532517
// ...
533518
})
534519
```
535520

521+
Make sure that fetching all blogs with a GET request still works without a token.
522+
536523
#### 4.23*: Blog List Expansion, step 11
537524

538525
After adding token-based authentication the tests for adding a new blog broke down. Fix them. Also, write a new test to ensure adding a blog fails with the proper status code <i>401 Unauthorized</i> if a token is not provided.

src/content/4/fi/osa4d.md

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -467,57 +467,53 @@ kayttaja -> kayttaja:
467467

468468
Sekä uuden blogin luonnin että blogin poistamisen yhteydessä on selvitettävä operaation tekevän käyttäjän identiteetti. Tätä auttaa jo tehtävässä 4.20 tehty middleware _tokenExtractor_. Tästä huolimatta <i>post</i>- ja <i>delete</i>-käsittelijöissä tulee vielä selvittää tokenia vastaava käyttäjä.
469469

470-
Tee nyt uusi middleware _userExtractor_, joka selvittää pyyntöön liittyvän käyttäjän ja sijoittaa sen request-olioon. Eli kun rekisteröit middlewaren ennen routeja tiedostossa <i>app.js</i>
471-
472-
```js
473-
app.use(middleware.userExtractor)
474-
```
475-
476-
pääsevät routet käyttäjään käsiksi suoraan viittaamalla _request.user_:
470+
Tee nyt uusi middleware _userExtractor_, joka selvittää pyyntöön liittyvän käyttäjän ja sijoittaa sen request-olioon. Middlewaren rekisteröinnin jälkeen _post-_ ja _delete-_-käsittelijöiden tulee päästä käyttäjään käsiksi suoraan viittaamalla _request.user_:
477471

478472

479473
```js
480-
blogsRouter.post('/', async (request, response) => {
474+
blogsRouter.post('/', userExtractor, async (request, response) => {
481475
// get user from request object
482476
const user = request.user
483477
// ..
484478
})
485479

486-
blogsRouter.delete('/:id', async (request, response) => {
480+
blogsRouter.delete('/:id', userExtractor, async (request, response) => {
487481
// get user from request object
488482
const user = request.user
489483
// ..
490484
})
491485
```
492486

493-
Huomaa, että on mahdollista rekisteröidä middleware suoritettavaksi vain osassa tapauksista. Eli sen sijaan, että _userExtractor_-middlewarea käytettäisiin aina
487+
Huomaa, että tässä middleware _userExtractor_ on rekisteröity yksittäisten routejen yhteyteen eli se suoritetaan vain osassa tapauksista. Eli sen sijaan, että _userExtractor_-middlewarea käytettäisiin aina
494488

495489
```js
496490
// use the middleware in all routes
497-
app.use(userExtractor) // highlight-line
491+
app.use(middleware.userExtractor) // highlight-line
498492

499493
app.use('/api/blogs', blogsRouter)
500494
app.use('/api/users', usersRouter)
501495
app.use('/api/login', loginRouter)
502496
```
503497

504-
voidaan määritellä, että se suoritetaan ainoastaan polun <i>/api/blogs</i> routeissa:
498+
voitaisiin määritellä, että se suoritetaan ainoastaan polun <i>/api/blogs</i> routeissa:
505499

506500
```js
507501
// use the middleware only in /api/blogs routes
508-
app.use('/api/blogs', userExtractor, blogsRouter) // highlight-line
502+
app.use('/api/blogs', middleware.userExtractor, blogsRouter) // highlight-line
509503
app.use('/api/users', usersRouter)
510504
app.use('/api/login', loginRouter)
511505
```
512506

513-
Tämä siis tapahtuu ketjuttamalla useampi middleware funktion <i>use</i> parametriksi. Middlewareja voitaisiin samaan tapaan rekisteröidä myös ainoastaan yksittäisten routejen yhteyteen:
507+
Tämä siis tapahtuu ketjuttamalla useampi middleware funktion <i>use</i> parametriksi. Middlewareja voidaan samaan tapaan rekisteröidä myös ainoastaan yksittäisten routejen yhteyteen:
514508

515509
```js
516-
router.post('/', userExtractor, async (request, response) => {
510+
router.post('/', userExtractor, async (request, response) => { // highlight-line
517511
// ...
518512
}
519513
```
520514
515+
Huolehdi, että kaikkien blogien hakeminen GET-pyynnöllä onnistuu edelleen ilman tokenia.
516+
521517
#### 4.23*: blogilistan laajennus, step11
522518
523519
Token-kirjautumisen lisääminen valitettavasti hajotti blogien lisäämiseen liittyvät testit. Korjaa testit. Tee myös testi, joka varmistaa että uuden blogin lisäys ei onnistu, ja pyyntö palauttaa oikean statuskoodin <i>401 Unauthorized</i> jos pyynnön mukana ei ole tokenia.

0 commit comments

Comments
 (0)