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/fr/part4d.md
+9-9Lines changed: 9 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -359,7 +359,7 @@ Dans les exercices suivants, les bases de la gestion des utilisateurs seront imp
359
359
360
360
**Encore un avertissement:** Si vous remarquez que vous mélangez les appels async/await et _then_, il est à 99 % certain que vous faites quelque chose de mal. Utilisez l'un ou l'autre, mais jamais les deux.
361
361
362
-
#### 4.15 : expansion de bloglist, étape3
362
+
#### 4.15 : expansion de Blog List étape3
363
363
364
364
Mettez en oeuvre un moyen de créer de nouveaux utilisateurs en effectuant une requête HTTP POST à l'adresse <i>api/users</i>. Les utilisateurs ont un <i>nom d'utilisateur, un mot de passe et un nom</i>.
365
365
@@ -379,7 +379,7 @@ La liste des utilisateurs peut, par exemple, ressembler à ceci:
379
379
380
380

381
381
382
-
#### 4.16* : expansion de bloglist, étape4
382
+
#### 4.16* : expansion de Blog List étape4
383
383
384
384
Ajoutez une fonctionnalité qui impose les restrictions suivantes pour la création de nouveaux utilisateurs : Le nom d'utilisateur et le mot de passe doivent être fournis. Le nom d'utilisateur et le mot de passe doivent avoir au moins 3 caractères de long. Le nom d'utilisateur doit être unique.
385
385
@@ -389,7 +389,7 @@ L'opération doit répondre avec un code de statut approprié et une sorte de me
389
389
390
390
Mettez également en oeuvre des tests qui garantissent que les utilisateurs invalides ne sont pas créés et qu'une opération d'ajout d'utilisateur invalide retourne un code de statut et un message d'erreur appropriés.
391
391
392
-
#### 4.17 : expansion de bloglist, étape5
392
+
#### 4.17 : expansion de Blog List étape5
393
393
394
394
Étendez les blogs pour que chaque blog contienne des informations sur le créateur du blog.
395
395
@@ -404,15 +404,15 @@ et que la liste de tous les utilisateurs affiche également les blogs créés pa
404
404
405
405

406
406
407
-
#### 4.18 : expansion de bloglist, étape6
407
+
#### 4.18 : expansion de Blog List étape6
408
408
409
409
Mettez en oeuvre l'authentification basée sur les jetons selon le chapitre [Authentification par jeton](/en/part4/token_authentication) de la partie 4.
410
410
411
-
#### 4.19 : expansion de bloglist, étape7
411
+
#### 4.19 : expansion de Blog List étape7
412
412
413
413
Modifiez l'ajout de nouveaux blogs pour qu'il ne soit possible que si un jeton valide est envoyé avec la requête HTTP POST. L'utilisateur identifié par le jeton est désigné comme le créateur du blog.
414
414
415
-
#### 4.20* : expansion de bloglist, étape8
415
+
#### 4.20* : expansion de Blog List étape8
416
416
417
417
[Cet exemple](/en/part4/token_authentication) de la partie 4 montre comment extraire le jeton de l'en-tête avec la fonction d'aide _getTokenFrom_ dans <i>controllers/blogs.js</i>.
Modifiez l'opération de suppression de blog de manière à ce qu'un blog puisse être supprimé uniquement par l'utilisateur qui l'a ajouté. Par conséquent, la suppression d'un blog n'est possible que si le jeton envoyé avec la requête est le même que celui du créateur du blog.
450
450
@@ -462,7 +462,7 @@ le champ <i>blog.user</i> ne contient pas une chaîne de caractères, mais un ob
462
462
if ( blog.user.toString() ===userid.toString() ) ...
463
463
```
464
464
465
-
#### 4.22* : expansion de bloglist, étape10
465
+
#### 4.22* : expansion de Blog List étape10
466
466
467
467
Les opérations de création d'un nouveau blog et de suppression d'un blog doivent toutes deux déterminer l'identité de l'utilisateur qui effectue l'opération. Le middleware _tokenExtractor_ que nous avons réalisé dans l'exercice 4.20 aide, mais les gestionnaires des opérations <i>post</i> et <i>delete</i> doivent toujours déterminer qui est l'utilisateur associé à un jeton spécifique.
Après l'ajout de l'authentification basée sur les jetons, les tests pour l'ajout d'un nouveau blog ont échoué. Corrigez les tests. Écrivez également un nouveau test pour vous assurer que l'ajout d'un blog échoue avec le code de statut approprié <i>401 Non autorisé</i> si un jeton n'est pas fourni.
<!-- **One more warning:** If you notice you are mixing async/await and _then_ calls, it is 99% certain you are doing something wrong. Use either or, never both.-->
<!-- Add a feature which adds the following restrictions to creating new users: Both username and password must be given. Both username and password must be at least 3 characters long. The username must be unique.-->
<!-- Also, implement tests which check that invalid users are not created and invalid add user operation returns a suitable status code and error message.-->
469
469
同时,实施测试,检查无效的用户是否被创建,无效的添加用户操作是否返回合适的状态代码和错误信息。
470
470
471
-
#### 4.17: bloglist expansion, step5
471
+
#### 4.17: Blog List Expansion, step5
472
472
473
473
<!-- Expand blogs so that each blog contains information on the creator of the blog.-->
474
474
扩展博客,使每个博客包含博客创建者的信息。
@@ -488,17 +488,17 @@ npm uninstall bcrypt
488
488
489
489

490
490
491
-
#### 4.18: bloglist expansion, step6
491
+
#### 4.18: Blog List Expansion, step6
492
492
493
493
<!-- Implement token-based authentication according to part 4 chapter [Token authentication](/en/part4/token_authentication).-->
<!-- Modify adding new blogs so that it is only possible if a valid token is sent with the HTTP POST request. The user identified by the token is designated as the creator of the blog.-->
<!-- Change the delete blog operation so that a blog can be deleted only by the user who added the blog. Therefore, deleting a blog is possible only if the token sent with the request is the same as that of the blog's creator.-->
@@ -556,7 +556,7 @@ const blog = await Blog.findById(...)
556
556
if ( blog.user.toString() ===userid.toString() ) ...
557
557
```
558
558
559
-
#### 4.22*: bloglist expansion, step10
559
+
#### 4.22*: Blog List Expansion, step10
560
560
561
561
<!-- 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 is the user holding a specific token.-->
<!-- After adding token based authentication the tests for adding a new blog broke down. Fix the tests. 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.-->
Copy file name to clipboardExpand all lines: src/content/5/fr/part5a.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -534,7 +534,7 @@ Pendant que vous faites les exercices, rappelez-vous toutes les méthodes de dé
534
534
535
535
**Attention:** Si vous remarquez que vous mélangez les fonctions _async/await_ et les commandes _then_, il est à 99,9 % certain que vous faites quelque chose de mal. Utilisez l'un ou l'autre, jamais les deux.
536
536
537
-
#### 5.1 : bloglist frontend, étape 1
537
+
#### 5.1 : Blog List Frontend, étape 1
538
538
539
539
Clonez l'application depuis [GitHub](https://github.com/fullstack-hy2020/bloglist-frontend) avec la commande:
540
540
@@ -593,21 +593,21 @@ Les détails de l'utilisateur connecté n'ont pas encore à être sauvegardés d
593
593
}
594
594
```
595
595
596
-
#### 5.2 : bloglist frontend, étape 2
596
+
#### 5.2 : Blog List Frontend, étape 2
597
597
598
598
Rendez la connexion 'permanente' en utilisant le stockage local. Implémentez également un moyen de se déconnecter.
599
599
600
600

601
601
602
602
Assurez-vous que le navigateur ne se souvient pas des détails de l'utilisateur après la déconnexion.
603
603
604
-
#### 5.3 : bloglist frontend, étape 3
604
+
#### 5.3 : Blog List Frontend, étape 3
605
605
606
606
Étendez votre application pour permettre à un utilisateur connecté d'ajouter de nouveaux blogs :
607
607
608
608

609
609
610
-
#### 5.4 : bloglist frontend, étape 4
610
+
#### 5.4 : Blog List Frontend, étape 4
611
611
612
612
Implémentez des notifications qui informent l'utilisateur des opérations réussies et échouées en haut de la page. Par exemple, lorsqu'un nouveau blog est ajouté, la notification suivante peut être affichée:
Copy file name to clipboardExpand all lines: src/content/5/ptbr/part5a.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -559,7 +559,7 @@ Enquanto faz os exercícios, lembre-se de todos os métodos de depuração que d
559
559
560
560
**Aviso:** Se você perceber que está misturando os comandos das funções _async/await_ e _then_, é 99,9% certo que está fazendo algo errado. Use apenas um ou outro, nunca os dois.
561
561
562
-
#### 5.1: frontend do bloglist, passo 1
562
+
#### 5.1: frontend do Blog List Passo 1
563
563
564
564
Clone a aplicação do [GitHub](https://github.com/fullstack-hy2020/bloglist-frontend) com o comando:
565
565
@@ -618,7 +618,7 @@ Detalhes do usuário logado não precisam ser salvos no local storage ainda.
618
618
}
619
619
```
620
620
621
-
### 5.2: frontend do bloglist, passo 2
621
+
### 5.2: frontend do Blog List Passo 2
622
622
623
623
624
624
Torne o login 'permanente' usando o local storage. Além disso, implemente uma maneira de deslogar.
@@ -627,13 +627,13 @@ Torne o login 'permanente' usando o local storage. Além disso, implemente uma m
627
627
628
628
Assegure-se de que o navegador não lembre os detalhes do usuário após o logout.
629
629
630
-
#### 5.3: frontend do bloglist, passo 3
630
+
#### 5.3: frontend do Blog List Passo 3
631
631
632
632
Expanda sua aplicação para permitir que um usuário logado adicione novos blogs:
633
633
634
634

635
635
636
-
#### 5.4: frontend do bloglist, passo 4
636
+
#### 5.4: frontend do Blog List Passo 4
637
637
638
638
Implemente notificações que informem o usuário sobre operações bem-sucedidas e mal-sucedidas no topo da página. Por exemplo, quando um novo blog é adicionado, a seguinte notificação pode ser exibida:
O bloco <i>beforeEach</i> deve esvaziar o banco de dados usando, por exemplo, o método que usamos no [material](/ptbr/part5/testes_end_to_end#controlando-o-estado-do-banco-de-dados).
1123
1123
1124
-
#### 5.18: testes end-to-end do bloglist, etapa 2
1124
+
#### 5.18: testes end-to-end do Blog List etapa 2
1125
1125
1126
1126
Faça testes para fazer login. Teste tentativas de login bem-sucedidas e malsucedidas.
1127
1127
Crie um novo usuário no bloco <i>beforeEach</i> para os testes.
Copy file name to clipboardExpand all lines: src/content/5/zh/part5a.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -595,7 +595,7 @@ window.localStorage.clear()
595
595
<!-- **Warning:** If you notice you are mixing in same function async/await and _then_ commands, it's 99.9% certain you are doing something wrong. Use either or, never both.-->
<!-- Make the login 'permanent' by using the local storage. Also implement a way to log out.-->
667
667
通过使用本地存储使登录成为"永久"。同时实现一个注销的方法。
@@ -671,14 +671,14 @@ npm start
671
671
<!-- Ensure the browser does not remember the details of the user after logging out.-->
672
672
确保浏览器在注销后不会记住用户的详细信息。
673
673
674
-
#### 5.3: bloglist frontend, step3
674
+
#### 5.3: Blog List Frontend, step3
675
675
676
676
<!-- Expand your application to allow a logged-in user to add new blogs:-->
677
677
扩展你的应用,允许登录的用户添加新的博客。
678
678
679
679

680
680
681
-
#### 5.4: bloglist frontend, step4
681
+
#### 5.4: Blog List Frontend, step4
682
682
683
683
<!-- Implement notifications which inform the user about successful and unsuccessful operations at the top of the page. For example, when a new blog is added, the following notification can be shown:-->
<!-- The <i>beforeEach</i> formatting blog must empty the database using for example the method we used in the [material](/en/part5/end_to_end_testing#controlling-the-state-of-the-database).-->
0 commit comments