﻿1
00:00:01,040 --> 00:00:03,970
‫Sprecher: Bisher haben wir in

2
00:00:03,970 --> 00:00:07,780
‫unserer Authentifizierungsimplementierung Benutzer mit einem korrekten Passwort angemeldet.

3
00:00:07,780 --> 00:00:11,170
‫Im Grunde haben wir also diesen ersten Schritt des

4
00:00:11,170 --> 00:00:13,170
‫Authentifizierungsworkflows abgeschlossen, bei dem

5
00:00:13,170 --> 00:00:15,760
‫ein JSON-Webtoken erstellt und an den

6
00:00:15,760 --> 00:00:18,730
‫Client zurückgesendet wird, wenn der Benutzer eine

7
00:00:18,730 --> 00:00:21,440
‫korrekte E-Mail und ein korrektes Passwort angibt.

8
00:00:21,440 --> 00:00:25,350
‫Als nächstes werden wir also tatsächlich geschützte Routen implementieren.

9
00:00:25,350 --> 00:00:28,630
‫Also im Grunde die Verwendung des erstellten

10
00:00:28,630 --> 00:00:32,930
‫JSON-Webtokens, um angemeldeten Benutzern Zugriff auf geschützte Routen zu geben.

11
00:00:32,930 --> 00:00:36,220
‫Und dies ist der zweite Schritt der Authentifizierung.

12
00:00:36,220 --> 00:00:39,823
‫Lassen Sie uns nun diese Funktionalität implementieren.

13
00:00:41,620 --> 00:00:43,880
‫Nehmen wir an, wir wollten

14
00:00:43,880 --> 00:00:45,670
‫die getAllTours-Route schützen.

15
00:00:45,670 --> 00:00:48,470
‫Also grundsätzlich nur eingeloggten Benutzern erlauben,

16
00:00:48,470 --> 00:00:51,560
‫auf eine Liste aller unserer Touren zuzugreifen.

17
00:00:51,560 --> 00:00:53,830
‫Und was bedeutet, dass vor dem

18
00:00:53,830 --> 00:00:55,700
‫Ausführen des Get-All-Tours-Handlers ein Blick

19
00:00:55,700 --> 00:00:57,353
‫darauf geworfen wird.

20
00:00:58,340 --> 00:01:01,330
‫Okay, bevor wir dieses Handle hier ausführen, müssen

21
00:01:01,330 --> 00:01:03,240
‫wir also eine Überprüfung durchführen, um

22
00:01:03,240 --> 00:01:05,120
‫zu überprüfen, ob der

23
00:01:05,120 --> 00:01:07,760
‫Benutzer tatsächlich angemeldet ist oder nicht, oder?

24
00:01:07,760 --> 00:01:09,540
‫Der beste Weg, dies

25
00:01:09,540 --> 00:01:11,640
‫zu tun, ist, wie Sie

26
00:01:11,640 --> 00:01:15,160
‫wahrscheinlich bereits wissen, die Verwendung einer Middleware-Funktion, in Ordnung?

27
00:01:15,160 --> 00:01:17,300
‫Um Routen zu schützen,

28
00:01:17,300 --> 00:01:19,640
‫werden wir in diesem Video eine

29
00:01:19,640 --> 00:01:23,560
‫Middleware-Funktion erstellen, die vor jedem dieser Handler ausgeführt wird, okay.

30
00:01:23,560 --> 00:01:26,320
‫Also eine Funktion, die genau hier

31
00:01:26,320 --> 00:01:29,440
‫sitzt, bevor diese Funktion hier ausgeführt werden kann.

32
00:01:29,440 --> 00:01:32,050
‫Und diese Middleware gibt dann entweder einen

33
00:01:32,050 --> 00:01:34,140
‫Fehler zurück, wenn der Benutzer nicht

34
00:01:34,140 --> 00:01:35,850
‫authentifiziert ist, also wenn

35
00:01:35,850 --> 00:01:37,780
‫er nicht eingeloggt ist, oder

36
00:01:37,780 --> 00:01:42,150
‫sie ruft die nächste Middleware auf, in diesem Fall der getAllTours-Handler, richtig?

37
00:01:42,150 --> 00:01:44,730
‫Und das schützt diese Route

38
00:01:44,730 --> 00:01:47,080
‫effektiv vor unbefugtem Zugriff.

39
00:01:47,080 --> 00:01:48,810
‫Lassen Sie uns also schnell diese

40
00:01:48,810 --> 00:01:50,290
‫Middleware-Funktion erstellen und sie

41
00:01:50,290 --> 00:01:51,480
‫dann hier platzieren,

42
00:01:51,480 --> 00:01:54,060
‫um zu veranschaulichen, was ich gerade gesagt habe.

43
00:01:54,060 --> 00:01:57,620
‫Okay, also hier in unserem Auth-Controller werden wir

44
00:01:57,620 --> 00:02:00,170
‫wieder eine neue Middleware-Funktion erstellen

45
00:02:03,920 --> 00:02:06,283
‫und sie heißt Protect.

46
00:02:08,510 --> 00:02:09,343
‫In

47
00:02:09,343 --> 00:02:11,600
‫Ordnung, und genau wie zuvor werde

48
00:02:12,480 --> 00:02:14,740
‫ich catchAsync verwenden, da alle diese

49
00:02:14,740 --> 00:02:16,553
‫Funktionen tatsächlich asynchrone Funktionen sind.

50
00:02:17,990 --> 00:02:21,210
‫Okay, und dann hier natürlich unsere Middleware-Funktion und

51
00:02:24,320 --> 00:02:27,270
‫vorerst lasst uns hier ganz einfach als nächstes

52
00:02:27,270 --> 00:02:30,190
‫aufrufen, nur damit wir hier tatsächlich irgendeinen

53
00:02:30,190 --> 00:02:32,240
‫Körper in dieser Middleware-Funktion

54
00:02:32,240 --> 00:02:35,090
‫haben und dann gehen wir zurück zu

55
00:02:35,090 --> 00:02:38,540
‫unseren Tourrouten und schützen dann diese Route, okay ?

56
00:02:38,540 --> 00:02:42,190
‫Zuerst muss ich dieses Authentifizierungs-Controller-Modul

57
00:02:42,190 --> 00:02:44,620
‫tatsächlich benötigen.

58
00:02:44,620 --> 00:02:45,453
‫Also

59
00:02:50,550 --> 00:02:52,350
‫const und dann verlangen, dass

60
00:02:56,410 --> 00:02:57,920
‫es in Controllern ist,

61
00:02:57,920 --> 00:02:59,713
‫und dann authController, okay.

62
00:03:01,430 --> 00:03:04,150
‫Also lass es uns

63
00:03:04,150 --> 00:03:07,460
‫jetzt direkt hier in der getAllTours-Route einstecken.

64
00:03:07,460 --> 00:03:08,293
‫Okay.

65
00:03:09,550 --> 00:03:13,913
‫Also authController. schützen.

66
00:03:14,860 --> 00:03:15,693
‫Okay.

67
00:03:15,693 --> 00:03:18,740
‫Und so wird diese Middleware-Funktion im Moment zuerst und

68
00:03:18,740 --> 00:03:21,875
‫wieder ausgeführt, wenn der Benutzer nicht authentifiziert ist, wird ein

69
00:03:21,875 --> 00:03:22,950
‫Fehler auftreten.

70
00:03:22,950 --> 00:03:25,070
‫Und natürlich dann die nächste Middleware,

71
00:03:25,070 --> 00:03:26,690
‫also diejenige, die

72
00:03:26,690 --> 00:03:30,540
‫eigentlich alle Touren bekommt und versendet, wird dann nicht ausgeführt.

73
00:03:30,540 --> 00:03:31,373
‫Okay.

74
00:03:31,373 --> 00:03:34,700
‫Auch hier wird der Zugriff auf diese

75
00:03:34,700 --> 00:03:38,223
‫Ressource hier effektiv vor nicht eingeloggten Benutzern geschützt.

76
00:03:39,250 --> 00:03:42,700
‫In Ordnung, also lass uns hierher zurückkehren.

77
00:03:42,700 --> 00:03:44,340
‫Nicht die

78
00:03:44,340 --> 00:03:45,993
‫Benutzerrouten, sondern der Authentifizierungscontroller.

79
00:03:46,850 --> 00:03:49,760
‫Alles klar, und nun zur Implementierung

80
00:03:49,760 --> 00:03:51,180
‫dieser Protect-Middleware.

81
00:03:51,180 --> 00:03:53,660
‫Was genau müssen wir tun?

82
00:03:53,660 --> 00:03:56,583
‫Nun, beginnen wir damit, dass wir hier ein paar Schritte ausführen.

83
00:03:57,460 --> 00:04:00,660
‫Alles klar, und eigentlich müssen wir diese Funktion zuerst

84
00:04:00,660 --> 00:04:03,720
‫als Async markieren, sonst würden wir den catchAsync

85
00:04:03,720 --> 00:04:05,630
‫nicht wirklich brauchen, oder?

86
00:04:05,630 --> 00:04:09,260
‫Und Sie werden gleich sehen, warum dies eine Async-Funktion

87
00:04:09,260 --> 00:04:11,360
‫sein muss, in Ordnung?

88
00:04:11,360 --> 00:04:13,760
‫Aber jetzt lassen Sie uns die Schritte erläutern,

89
00:04:13,760 --> 00:04:16,803
‫die wir unternehmen müssen, um diese Middleware zum Schutz zu implementieren.

90
00:04:18,460 --> 00:04:19,840
‫Genau wie zuvor werde

91
00:04:19,840 --> 00:04:21,990
‫ich diese Schritte hier als Kommentare einfügen.

92
00:04:23,340 --> 00:04:26,173
‫Zuerst müssen wir das Token tatsächlich erhalten.

93
00:04:28,720 --> 00:04:29,553
‫Und überprüfen

94
00:04:30,660 --> 00:04:32,610
‫Sie, ob es im Grunde genommen da

95
00:04:32,610 --> 00:04:34,303
‫ist, also überprüfen Sie, ob es existiert.

96
00:04:35,400 --> 00:04:39,113
‫Als nächstes müssen wir das Token validieren.

97
00:04:41,860 --> 00:04:44,383
‫Und das ist im Grunde der superwichtige

98
00:04:44,383 --> 00:04:48,900
‫Schritt, über den wir zuvor gesprochen haben, bei dem der JWT-Algorithmus überprüft, ob

99
00:04:48,900 --> 00:04:50,680
‫die Signatur gültig ist oder

100
00:04:50,680 --> 00:04:51,513
‫nicht.

101
00:04:51,513 --> 00:04:54,950
‫Also, wenn das Token gültig ist oder nicht, okay?

102
00:04:54,950 --> 00:04:57,450
‫Also nennen wir das hier eigentlich Verifizierung.

103
00:04:58,930 --> 00:05:01,680
‫Ich denke, so haben wir es auf der Folie genannt,

104
00:05:01,680 --> 00:05:03,630
‫auf der wir zuvor darüber gesprochen haben.

105
00:05:03,630 --> 00:05:06,040
‫Und wenn Sie sich nicht wirklich erinnern, wie das funktioniert

106
00:05:06,040 --> 00:05:07,350
‫hat, können Sie jederzeit

107
00:05:07,350 --> 00:05:10,003
‫zurückgehen und sich den Vortrag noch einmal ansehen, in Ordnung?

108
00:05:11,470 --> 00:05:15,750
‫Als nächstes müssen wir also, wenn die Überprüfung tatsächlich erfolgreich war,

109
00:05:15,750 --> 00:05:18,930
‫auch überprüfen, ob der Benutzer, der versucht, auf

110
00:05:18,930 --> 00:05:21,870
‫die Route zuzugreifen, noch existiert, okay?

111
00:05:21,870 --> 00:05:25,940
‫Überprüfen Sie also, ob der Benutzer noch vorhanden ist, und ich

112
00:05:25,940 --> 00:05:28,090
‫werde mehr darüber sprechen, warum

113
00:05:28,090 --> 00:05:32,610
‫jeder dieser Schritte erforderlich ist, sobald wir mit der Implementierung beginnen, in Ordnung?

114
00:05:32,610 --> 00:05:35,410
‫Im Moment macht das für Sie vielleicht nicht so viel

115
00:05:35,410 --> 00:05:38,950
‫Sinn, aber ich werde noch einmal über jeden Halt sprechen, sobald wir dort sind.

116
00:05:38,950 --> 00:05:39,783
‫Gut?

117
00:05:39,783 --> 00:05:41,440
‫Und schließlich müssen wir auch

118
00:05:42,980 --> 00:05:43,813
‫überprüfen,

119
00:05:45,490 --> 00:05:47,000
‫ob der Benutzer das

120
00:05:50,090 --> 00:05:51,720
‫Passwort geändert hat, nachdem

121
00:05:53,060 --> 00:05:54,993
‫das JWT ausgestellt wurde, okay?

122
00:05:56,690 --> 00:05:58,280
‫Nun, sagen wir hier einfach

123
00:05:58,280 --> 00:06:01,060
‫Token, wir haben es überall sonst Token genannt, okay?

124
00:06:01,060 --> 00:06:03,320
‫Und nur wenn es bei keinem

125
00:06:03,320 --> 00:06:05,310
‫dieser Schritte hier Probleme

126
00:06:05,310 --> 00:06:08,480
‫gab, wird natürlich der nächste aufgerufen, der dann Zugriff

127
00:06:08,480 --> 00:06:11,210
‫auf die von uns geschützte Route erhält.

128
00:06:11,210 --> 00:06:16,210
‫In unserem aktuellen Beispiel also wieder dieser getAllTours-Handler.

129
00:06:16,420 --> 00:06:17,610
‫Richtig?

130
00:06:17,610 --> 00:06:19,260
‫Okay, aber gehen wir

131
00:06:19,260 --> 00:06:22,540
‫zurück und beginnen mit der Umsetzung unseres allerersten Schrittes hier.

132
00:06:22,540 --> 00:06:24,380
‫Also im Grunde genommen das

133
00:06:24,380 --> 00:06:26,860
‫Token holen und dann prüfen, ob es tatsächlich existiert.

134
00:06:26,860 --> 00:06:31,340
‫Es ist also eine gängige Praxis, ein Token mit einem http-Header mit

135
00:06:31,340 --> 00:06:33,380
‫der Anfrage zu senden, okay?

136
00:06:33,380 --> 00:06:36,580
‫Schauen wir uns also an, wie wir Header in Postman setzen können,

137
00:06:36,580 --> 00:06:38,427
‫um ihn zusammen mit der Anfrage

138
00:06:38,427 --> 00:06:40,420
‫zu senden, und dann auch, wie wir

139
00:06:40,420 --> 00:06:42,410
‫in Express auf diese Header zugreifen können.

140
00:06:42,410 --> 00:06:45,300
‫Und das machen wir zuerst.

141
00:06:45,300 --> 00:06:50,300
‫Also hier in apt. js Ich denke, wir haben hier

142
00:06:51,240 --> 00:06:54,610
‫diese nette Middleware, also melden wir uns hier tatsächlich

143
00:06:56,290 --> 00:06:59,890
‫bei der Konsolenanforderung an. Header, Okay, wir

144
00:06:59,890 --> 00:07:03,250
‫haben vorher über http-Header gesprochen, und

145
00:07:03,250 --> 00:07:07,140
‫so können wir in Express auf sie zugreifen.

146
00:07:07,140 --> 00:07:10,350
‫Okay, also im Wesentlichen zu den Anforderungsheadern, also

147
00:07:10,350 --> 00:07:13,753
‫denen, die ein Client zusammen mit seiner Anforderung senden kann.

148
00:07:14,600 --> 00:07:17,890
‫Okay, und hier in Postman kommen wir nun tatsächlich

149
00:07:19,060 --> 00:07:22,150
‫zu der Route, die wir eigentlich schützen wollen.

150
00:07:22,150 --> 00:07:24,270
‫Und dann hier einen Header setzen.

151
00:07:24,270 --> 00:07:25,670
‫Und lass uns einfach

152
00:07:29,100 --> 00:07:32,070
‫einen Test machen und ihn auf jonas setzen, okay?

153
00:07:32,070 --> 00:07:33,340
‫Jetzt schicke ich das

154
00:07:35,140 --> 00:07:38,240
‫einfach und hier in Express, schauen wir uns das an.

155
00:07:38,240 --> 00:07:41,800
‫Und so erhalten wir hier tatsächlich ein Objekt mit allen Headern,

156
00:07:41,800 --> 00:07:43,900
‫die Teil der Anfrage sind.

157
00:07:43,900 --> 00:07:45,700
‫Also das alles hier.

158
00:07:45,700 --> 00:07:48,380
‫Und Sie sehen, dass es eine Reihe von

159
00:07:48,380 --> 00:07:51,090
‫Headern gibt, die Postman tatsächlich automatisch zusammen mit

160
00:07:51,090 --> 00:07:54,740
‫der Anfrage sendet, zum Beispiel, dass der User-Agent Postman ist und

161
00:07:54,740 --> 00:07:56,970
‫auch der Host sendet, und einige

162
00:07:56,970 --> 00:07:59,370
‫andere, über die wir später sprechen werden,

163
00:07:59,370 --> 00:08:00,943
‫wie akzeptieren zum Beispiel.

164
00:08:01,800 --> 00:08:04,070
‫Was hier zählt, ist eigentlich der Header, den

165
00:08:04,070 --> 00:08:05,470
‫wir selbst gesetzt haben.

166
00:08:05,470 --> 00:08:08,730
‫Okay, der Testheader wurde auf jonas gesetzt, den wir gerade

167
00:08:08,730 --> 00:08:10,360
‫in unserer Anfrage gesendet haben.

168
00:08:10,360 --> 00:08:14,240
‫Um nun ein JSON-Webtoken als Header zu senden, gibt

169
00:08:14,240 --> 00:08:16,470
‫es dafür tatsächlich einen Standard.

170
00:08:16,470 --> 00:08:21,080
‫Also lasst uns hierher zurückkehren, das alles loswerden.

171
00:08:21,080 --> 00:08:24,760
‫Und so ist der Standard zum Senden eines Tokens, dass wir

172
00:08:24,760 --> 00:08:27,503
‫immer einen Header namens Authorization verwenden sollten.

173
00:08:30,430 --> 00:08:31,263
‫Okay?

174
00:08:31,263 --> 00:08:32,940
‫Also einfach so und

175
00:08:32,940 --> 00:08:35,890
‫dann sollte der Wert dieses Headers immer mit

176
00:08:35,890 --> 00:08:37,410
‫Bearer beginnen, okay?

177
00:08:37,410 --> 00:08:42,300
‫Denn im Grunde tragen wir, wir haben, wir besitzen diesen Token und dann

178
00:08:42,300 --> 00:08:44,680
‫hier den Wert des Tokens.

179
00:08:44,680 --> 00:08:47,750
‫Also genau wie diese zufällige Zeichenfolge, die wir zuvor bekommen haben.

180
00:08:47,750 --> 00:08:51,610
‫Belassen wir es also einfach hier als Beispiel und schicken

181
00:08:51,610 --> 00:08:53,323
‫wir das jetzt.

182
00:08:55,180 --> 00:08:57,913
‫Und dann sollten wir es tatsächlich hier bekommen.

183
00:08:59,050 --> 00:09:00,310
‫Okay.

184
00:09:00,310 --> 00:09:03,620
‫Jetzt wandelt Express dann automatisch alle Header-Namen in

185
00:09:03,620 --> 00:09:06,160
‫Kleinbuchstaben um, wie Sie hier sehen

186
00:09:06,160 --> 00:09:09,950
‫können, aber unser Header-Wert hier ist natürlich immer noch derselbe.

187
00:09:09,950 --> 00:09:13,550
‫Okay, und im Grunde ist dieser Teil des

188
00:09:13,550 --> 00:09:15,050
‫Header-Werts unser Token.

189
00:09:15,050 --> 00:09:16,870
‫Und so sollten wir jetzt

190
00:09:16,870 --> 00:09:18,720
‫dieses Token aus dem Header lesen.

191
00:09:18,720 --> 00:09:19,553
‫Gut?

192
00:09:20,550 --> 00:09:22,793
‫Wenn also tatsächlich

193
00:09:24,130 --> 00:09:29,130
‫req. Überschriften. Berechtigung, okay, und

194
00:09:32,730 --> 00:09:34,300
‫wenn es

195
00:09:34,300 --> 00:09:40,643
‫im Grunde mit diesem Trägerstring hier beginnt, okay, also

196
00:09:42,720 --> 00:09:46,670
‫req. Überschriften. Autorisierung und jetzt

197
00:09:46,670 --> 00:09:48,240
‫ist dies ein String

198
00:09:48,240 --> 00:09:50,050
‫und damit können wirstartsWith verwenden,

199
00:09:52,210 --> 00:09:55,290
‫okay, das ist also nur normales JavaScript wieder

200
00:09:57,910 --> 00:09:58,930
‫okay.

201
00:09:58,930 --> 00:10:03,020
‫Das sind also die Bedingungen, unter denen wir eigentlich

202
00:10:03,020 --> 00:10:05,430
‫einen Token speichern wollen, okay?

203
00:10:05,430 --> 00:10:08,530
‫Also noch einmal, falls der

204
00:10:08,530 --> 00:10:13,260
‫Header existiert und sein Wert mit Bearer beginnt, okay.

205
00:10:13,260 --> 00:10:18,260
‫Dann wollen wir in diesem Fall sagen, dass das Token gleich

206
00:10:18,460 --> 00:10:22,257
‫req ist. Überschriften. Autorisierung und

207
00:10:23,890 --> 00:10:26,810
‫wie bekommen wir nun diesen zweiten Teil

208
00:10:26,810 --> 00:10:28,350
‫des Strings eigentlich?

209
00:10:28,350 --> 00:10:30,820
‫Nun, im Grunde teilen wir den String

210
00:10:30,820 --> 00:10:33,050
‫durch dieses Leerzeichen auf, okay, was dann

211
00:10:33,050 --> 00:10:34,610
‫ein Array mit diesem

212
00:10:34,610 --> 00:10:35,890
‫Bearer und

213
00:10:35,890 --> 00:10:37,860
‫mit diesem Token erstellt, und dann

214
00:10:37,860 --> 00:10:39,690
‫nehmen wir den Teil des

215
00:10:39,690 --> 00:10:41,063
‫Arrays, den wir wollen.

216
00:10:42,260 --> 00:10:45,080
‫Teilen Sie also mit Leerzeichen auf, und

217
00:10:45,080 --> 00:10:48,380
‫dann wollen wir von diesem Array das zweite Element.

218
00:10:48,380 --> 00:10:49,490
‫Gut?

219
00:10:49,490 --> 00:10:52,760
‫Jetzt können wir eine Variable nicht wirklich innerhalb eines

220
00:10:52,760 --> 00:10:53,800
‫if-Blocks definieren,

221
00:10:53,800 --> 00:10:55,440
‫weil const, und let,

222
00:10:55,440 --> 00:10:58,260
‫also die neuen ES6-Variablen-Deklaratoren tatsächlich blockbereichsbezogen sind,

223
00:10:58,260 --> 00:10:59,710
‫und alles, was

224
00:10:59,710 --> 00:11:02,650
‫wir hier in diesem Block definieren, wird dann

225
00:11:02,650 --> 00:11:04,700
‫außerhalb davon nicht verfügbar sein.

226
00:11:05,690 --> 00:11:08,643
‫Okay, und das machen wir draußen.

227
00:11:11,970 --> 00:11:16,280
‫Und diesen Wert dann einfach dem Token neu zuweisen.

228
00:11:16,280 --> 00:11:17,113
‫Okay.

229
00:11:18,670 --> 00:11:21,880
‫Und jetzt loggen wir das Token in die Konsole ein,

230
00:11:21,880 --> 00:11:23,863
‫um zu sehen, ob es funktioniert.

231
00:11:25,130 --> 00:11:28,670
‫Okay, und tatsächlich holen wir uns hier

232
00:11:28,670 --> 00:11:30,373
‫ein echtes Token.

233
00:11:31,240 --> 00:11:33,253
‫Also der, mit dem wir uns gerade eingeloggt haben.

234
00:11:35,990 --> 00:11:39,710
‫Und dann stell das hier rein, in Ordnung.

235
00:11:39,710 --> 00:11:40,723
‫Also

236
00:11:42,360 --> 00:11:45,480
‫schick es, und ah!

237
00:11:45,480 --> 00:11:45,480
‫Auf geht's.

238
00:11:45,480 --> 00:11:49,760
‫Hier haben wir also unsere JSON-Webtoken-Daten, die wir gerade zusammen mit der

239
00:11:49,760 --> 00:11:51,110
‫Anfrage gesendet haben.

240
00:11:51,110 --> 00:11:55,120
‫Lassen Sie uns dieses Konsolenprotokoll hier einfach schnell deaktivieren.

241
00:11:55,120 --> 00:11:59,590
‫In Ordnung, und bevor wir weitermachen, sollten wir dann

242
00:11:59,590 --> 00:12:03,480
‫tatsächlich überprüfen, ob das Token tatsächlich existiert.

243
00:12:03,480 --> 00:12:04,313
‫Okay.

244
00:12:05,810 --> 00:12:07,510
‫Wenn also kein Token

245
00:12:10,360 --> 00:12:14,090
‫vorhanden ist, dann wollen wir natürlich einen neuen Fehler erstellen.

246
00:12:14,090 --> 00:12:16,630
‫Richtig, und so wie zuvor kehren wir

247
00:12:16,630 --> 00:12:19,030
‫von dieser Middleware zurück und rufen

248
00:12:19,030 --> 00:12:21,260
‫die nächste an, okay.

249
00:12:21,260 --> 00:12:24,560
‫Und hier drin werden wir dann einen Fehler

250
00:12:24,560 --> 00:12:26,140
‫erstellen und gehen

251
00:12:26,140 --> 00:12:29,403
‫mit diesem Fehler direkt zu unserer globalen Fehlerbehandlungs-Middleware.

252
00:12:30,487 --> 00:12:33,860
‫Alles klar, wenn also kein Token mit der Anfrage gesendet wird, bedeutet

253
00:12:33,860 --> 00:12:35,913
‫dies, dass wir nicht eingeloggt sind.

254
00:12:36,870 --> 00:12:40,310
‫Senden wir also an den Benutzer, bei dem Sie nicht

255
00:12:41,530 --> 00:12:42,373
‫angemeldet sind.

256
00:12:45,610 --> 00:12:48,793
‫Bitte loggen Sie sich ein, um Zugang zu erhalten.

257
00:12:50,137 --> 00:12:52,380
‫In Ordnung, und jetzt

258
00:12:52,380 --> 00:12:55,090
‫ist der Statuscode für diese Art von

259
00:12:55,090 --> 00:12:58,040
‫Situation 401, was bedeutet, nicht autorisiert, okay?

260
00:12:58,040 --> 00:13:00,430
‫Ich bin mir nicht sicher, ob wir das schon

261
00:13:00,430 --> 00:13:03,380
‫einmal benutzt haben und ja, tatsächlich haben wir es hier auch gemacht.

262
00:13:03,380 --> 00:13:05,290
‫Okay, und das bedeutet im

263
00:13:05,290 --> 00:13:08,890
‫Grunde, dass die Daten, die in der Anfrage gesendet wurden,

264
00:13:08,890 --> 00:13:12,110
‫korrekt sind, aber im Grunde nicht ausreichen, um dem

265
00:13:12,110 --> 00:13:15,050
‫Benutzer Zugriff auf eine angeforderte Ressource zu verschaffen.

266
00:13:15,050 --> 00:13:16,080
‫Gut.

267
00:13:16,080 --> 00:13:17,280
‫Einfach hier

268
00:13:18,280 --> 00:13:20,270
‫speichern und nochmal testen.

269
00:13:20,270 --> 00:13:24,660
‫Wenn wir diesen Header hier also grundsätzlich wegnehmen,

270
00:13:24,660 --> 00:13:28,090
‫sollten wir sofort auf diesen Fehler eingehen,

271
00:13:28,090 --> 00:13:29,120
‫oder?

272
00:13:29,120 --> 00:13:31,910
‫Und tatsächlich, Sie sind nicht eingeloggt, bitte melden Sie sich

273
00:13:31,910 --> 00:13:33,340
‫an, um Zugang zu erhalten.

274
00:13:33,340 --> 00:13:35,600
‫Mit 401 nicht autorisiert.

275
00:13:35,600 --> 00:13:38,950
‫Groß! Der Teil funktioniert also schon.

276
00:13:38,950 --> 00:13:41,500
‫In Ordnung, und jetzt nur um es zusammenzufassen,

277
00:13:41,500 --> 00:13:44,590
‫also senden wir im Moment kein Token zusammen mit

278
00:13:44,590 --> 00:13:45,903
‫der Anfrage, oder?

279
00:13:47,330 --> 00:13:51,370
‫Aus diesem Grund gibt es natürlich kein Zeichen, okay?

280
00:13:51,370 --> 00:13:53,380
‫Und deshalb erstellen wir

281
00:13:53,380 --> 00:13:56,680
‫diesen Fehler, der dann unsere Fehlerbehandlungs-Middleware dazu veranlasst,

282
00:13:56,680 --> 00:13:59,260
‫diesen Fehler an den Client zurückzusenden, okay?

283
00:13:59,260 --> 00:14:02,690
‫Und dann bekommen wir natürlich nicht auf

284
00:14:02,690 --> 00:14:05,600
‫alle Touren Zugriff, denn natürlich

285
00:14:05,600 --> 00:14:08,710
‫läuft diese Middleware vor dem getAllTours-Controller.

286
00:14:08,710 --> 00:14:13,070
‫Und im Moment ist das wirklich geschützt, okay?

287
00:14:13,070 --> 00:14:17,170
‫Es funktioniert also jetzt schon ganz gut.

288
00:14:17,170 --> 00:14:19,870
‫Aber das reicht natürlich bei weitem nicht aus,

289
00:14:19,870 --> 00:14:23,480
‫denn es reicht nicht, nur einen Token mit einer Anfrage zu senden.

290
00:14:23,480 --> 00:14:26,290
‫Es muss auch ein gültiger Token sein.

291
00:14:26,290 --> 00:14:28,410
‫Im Grunde also ein Token, bei dem niemand

292
00:14:28,410 --> 00:14:30,270
‫versucht hat, die Nutzlast zu ändern.

293
00:14:30,270 --> 00:14:34,110
‫Okay, und denken Sie daran, dass die Nutzlast in

294
00:14:34,110 --> 00:14:39,110
‫unserem Fall immer die user_id des Benutzers ist, für den das Token ausgestellt wurde.

295
00:14:39,210 --> 00:14:41,380
‫Alles klar, und als

296
00:14:41,380 --> 00:14:44,200
‫nächstes müssen wir diesen Überprüfungsschritt implementieren.

297
00:14:44,200 --> 00:14:47,160
‫Aber dieser Vortrag dauert schon ziemlich lange und es

298
00:14:47,160 --> 00:14:49,520
‫gibt hier noch viel zu tun,

299
00:14:49,520 --> 00:14:52,403
‫also lassen wir das eigentlich für das nächste Video.

