﻿1
00:00:01,030 --> 00:00:02,580
‫Kursleiter: Willkommen zurück.

2
00:00:02,580 --> 00:00:05,470
‫Bei der Authentifizierung und Autorisierung dreht sich

3
00:00:05,470 --> 00:00:07,680
‫alles darum, dass sich Benutzer anmelden,

4
00:00:07,680 --> 00:00:11,040
‫sich anmelden und auf Seiten oder Routen zugreifen, die

5
00:00:11,040 --> 00:00:13,190
‫wir ihnen dazu erteilen.

6
00:00:13,190 --> 00:00:15,570
‫Es dreht sich also wirklich alles um die Benutzer.

7
00:00:15,570 --> 00:00:18,890
‫Und deshalb müssen wir in dieser Vorlesung damit beginnen, das

8
00:00:18,890 --> 00:00:21,260
‫Benutzermodell zu implementieren, damit wir im

9
00:00:21,260 --> 00:00:24,383
‫nächsten dann neue Benutzer in unserer Datenbank anlegen können.

10
00:00:25,990 --> 00:00:28,710
‫Also, zurück in unserer Anwendung, lassen Sie uns

11
00:00:28,710 --> 00:00:31,740
‫fortfahren und eine neue Datei für das Benutzermodell erstellen.

12
00:00:31,740 --> 00:00:34,373
‫Also natürlich in unserem Modellordner, Neue

13
00:00:38,571 --> 00:00:40,890
‫Datei, userModel. js.

14
00:00:40,890 --> 00:00:42,610
‫Und genau wie zuvor

15
00:00:42,610 --> 00:00:44,563
‫benötigen wir zunächst das Mongoose-Paket.

16
00:00:52,430 --> 00:00:53,510
‫Gut.

17
00:00:53,510 --> 00:00:55,920
‫Und jetzt müssen wir nur noch ein Schema

18
00:00:55,920 --> 00:00:57,890
‫erstellen und daraus ein Modell erstellen.

19
00:00:57,890 --> 00:00:59,670
‫So wie wir es bei den Touren gemacht

20
00:00:59,670 --> 00:01:01,750
‫haben, werden wir es jetzt hier mit den Benutzern machen.

21
00:01:01,750 --> 00:01:04,140
‫Und eigentlich, da wir das schon früher gemacht

22
00:01:04,140 --> 00:01:07,660
‫haben, möchte ich diese hier als Herausforderung für Sie lassen, in Ordnung?

23
00:01:07,660 --> 00:01:10,963
‫Ich möchte, dass Sie ein Schema mit fünf Feldern erstellen.

24
00:01:12,020 --> 00:01:14,713
‫Also Name, E-Mail, dann ein Foto; das

25
00:01:16,660 --> 00:01:19,380
‫wird nur eine Schnur sein, also genau

26
00:01:19,380 --> 00:01:21,063
‫wie bei unseren Touren.

27
00:01:22,230 --> 00:01:24,223
‫Ich möchte auch ein Feld für ein

28
00:01:25,300 --> 00:01:27,283
‫Kennwort und für eine Kennwortbestätigung.

29
00:01:30,230 --> 00:01:31,063
‫Okay?

30
00:01:31,063 --> 00:01:32,330
‫Und dazu später,

31
00:01:32,330 --> 00:01:34,190
‫wenn ich diese Herausforderung für Sie

32
00:01:34,190 --> 00:01:36,480
‫löse, aber jetzt möchte ich wirklich, dass Sie

33
00:01:36,480 --> 00:01:38,540
‫üben, dieses Schema selbst zu erstellen

34
00:01:38,540 --> 00:01:41,770
‫und dann auch ein Modell aus diesem Schema zu erstellen, okay?

35
00:01:41,770 --> 00:01:44,090
‫Und am Ende können Sie es auch exportieren.

36
00:01:44,090 --> 00:01:46,350
‫Bitte pausieren Sie das Video an dieser Stelle, und

37
00:01:46,350 --> 00:01:48,250
‫ich bin in einer Sekunde wieder hier, um

38
00:01:48,250 --> 00:01:49,973
‫diese Herausforderung für Sie zu lösen.

39
00:01:52,590 --> 00:01:53,480
‫Gut.

40
00:01:53,480 --> 00:01:55,030
‫Ich hoffe, Sie haben diese Herausforderung gemeistert.

41
00:01:55,030 --> 00:01:56,690
‫Und so werde ich es jetzt lösen.

42
00:01:56,690 --> 00:01:59,330
‫Und machen Sie sich keine Sorgen, wenn es nicht genau gleich aussieht.

43
00:01:59,330 --> 00:02:02,150
‫Sie können es einfach anpassen, während wir dieses Video durchgehen.

44
00:02:02,150 --> 00:02:03,563
‫Also durch diese Lösung.

45
00:02:05,430 --> 00:02:07,730
‫Also nenne ich das userSchema.

46
00:02:09,310 --> 00:02:13,107
‫Und genau wie zuvor kreieren wir einen neuen Mungo. Schema.

47
00:02:15,270 --> 00:02:18,010
‫Und dann übergeben wir unser Schemaobjekt und

48
00:02:18,010 --> 00:02:20,410
‫beginnen mit der Definition unserer Felder.

49
00:02:20,410 --> 00:02:24,773
‫Also möchte ich natürlich einen Namen vom Typ String.

50
00:02:28,430 --> 00:02:31,023
‫Und ich möchte auch, dass es erforderlich ist.

51
00:02:32,440 --> 00:02:34,310
‫Wenn also ein neuer Benutzer

52
00:02:34,310 --> 00:02:37,113
‫erstellt wird, muss er uns grundsätzlich seinen Namen mitteilen.

53
00:02:37,980 --> 00:02:40,623
‫Setzen wir also auch hier eine Fehlermeldung.

54
00:02:41,617 --> 00:02:46,960
‫„Bitte nennen Sie uns Ihren Namen! " Gut?

55
00:02:46,960 --> 00:02:48,400
‫Das ist also der Name.

56
00:02:48,400 --> 00:02:50,373
‫Als nächstes wollen wir die E-Mail.

57
00:02:51,680 --> 00:02:52,630
‫Gut?

58
00:02:52,630 --> 00:02:55,310
‫Dies wird also für die Anmeldung des

59
00:02:55,310 --> 00:02:58,630
‫Benutzers verwendet und wir werden hier keine Benutzernamenseigenschaft erstellen, okay?

60
00:02:58,630 --> 00:03:01,920
‫In einigen Anwendungen wird also ein Benutzername verwendet,

61
00:03:01,920 --> 00:03:04,500
‫aber in diesem Fall möchten wir

62
00:03:04,500 --> 00:03:08,030
‫es hier einfach halten und Benutzer einfach per E-Mail identifizieren.

63
00:03:08,030 --> 00:03:10,803
‫Dies wiederum ist vom Typ String.

64
00:03:13,150 --> 00:03:14,873
‫Es ist auch ein Pflichtfeld.

65
00:03:22,030 --> 00:03:23,883
‫Also nochmal eine Fehlermeldung.

66
00:03:24,780 --> 00:03:28,873
‫Als nächstes möchte ich, dass E-Mails auch einzigartig sind, okay?

67
00:03:30,360 --> 00:03:33,320
‫Also, unique auf true gesetzt.

68
00:03:33,320 --> 00:03:35,960
‫Und das liegt im Grunde daran, dass

69
00:03:35,960 --> 00:03:39,450
‫diese E-Mail natürlich die eindeutige Kennung jedes Benutzers ist, okay?

70
00:03:39,450 --> 00:03:42,920
‫E-Mails sollten jetzt standardmäßig eindeutig sein, oder?

71
00:03:42,920 --> 00:03:45,570
‫Aber lassen Sie uns hier einfach 100% sicher

72
00:03:45,570 --> 00:03:47,000
‫sein, dass es

73
00:03:47,000 --> 00:03:49,740
‫keine Konten mit derselben E-Mail-Adresse geben wird, in Ordnung?

74
00:03:49,740 --> 00:03:52,770
‫Jetzt können wir hier auch eine andere Schematypoption

75
00:03:52,770 --> 00:03:54,373
‫angeben, die Kleinbuchstaben ist.

76
00:03:56,150 --> 00:03:57,100
‫Das ist also ein neues.

77
00:03:57,100 --> 00:03:58,410
‫Und es ist kein Validator.

78
00:03:58,410 --> 00:04:00,410
‫Alles, was es tun wird,

79
00:04:00,410 --> 00:04:03,150
‫ist, die E-Mail im Grunde in Kleinbuchstaben umzuwandeln.

80
00:04:03,150 --> 00:04:08,140
‫Wenn also jemand wie Jonas@Gmail oder was auch immer sagt, dann

81
00:04:08,140 --> 00:04:11,260
‫wird das alles in Kleinbuchstaben umgewandelt.

82
00:04:11,260 --> 00:04:12,210
‫Okay?

83
00:04:12,210 --> 00:04:15,380
‫Und nun endlich wollen wir auch die

84
00:04:15,380 --> 00:04:16,780
‫E-Mail-Adresse tatsächlich validieren.

85
00:04:16,780 --> 00:04:19,300
‫Testen Sie also grundsätzlich, ob

86
00:04:19,300 --> 00:04:23,070
‫die bereitgestellte E-Mail dem gängigen E-Mail-Format entspricht, in Ordnung?

87
00:04:23,070 --> 00:04:27,710
‫Also zum Beispiel wieder jonas@gmail. com wäre eine gültige E-Mail,

88
00:04:27,710 --> 00:04:29,250
‫aber zum

89
00:04:29,250 --> 00:04:32,270
‫Beispiel wäre dies nicht der Fall.

90
00:04:32,270 --> 00:04:33,860
‫Oder so.

91
00:04:33,860 --> 00:04:36,290
‫Und dafür müssen wir im Grunde unseren

92
00:04:36,290 --> 00:04:37,603
‫eigenen Validator erstellen.

93
00:04:38,650 --> 00:04:41,350
‫Jetzt werden wir dafür keinen eigenen

94
00:04:41,350 --> 00:04:44,480
‫Validator erstellen, sondern stattdessen das Validator-Paket verwenden, das

95
00:04:44,480 --> 00:04:47,730
‫ich Ihnen zuvor von npm gezeigt habe, richtig?

96
00:04:47,730 --> 00:04:50,520
‫Denken Sie also daran, hier im tourModel habe ich Ihnen

97
00:04:50,520 --> 00:04:52,770
‫dieses Modul tatsächlich hier gezeigt, aber dann

98
00:04:52,770 --> 00:04:54,620
‫haben wir es nicht verwendet,

99
00:04:54,620 --> 00:04:57,270
‫weil es in unserem Fall nicht wirklich nützlich war.

100
00:04:57,270 --> 00:04:59,810
‫Aber jetzt wird es sehr nützlich

101
00:04:59,810 --> 00:05:02,933
‫sein, und deshalb kopiere ich es hierher, okay,

102
00:05:05,620 --> 00:05:09,180
‫damit wir es jetzt direkt in unserem Schema verwenden können.

103
00:05:09,180 --> 00:05:12,653
‫Um nun unseren benutzerdefinierten Validator zu erstellen, verwenden

104
00:05:13,730 --> 00:05:16,550
‫wir validieren, erinnerst du dich?

105
00:05:16,550 --> 00:05:18,870
‫Und dann übergeben wir die Funktion

106
00:05:18,870 --> 00:05:21,380
‫anti-error message, genau wie bei unseren anderen Validatoren.

107
00:05:21,380 --> 00:05:23,980
‫Und um zu überprüfen, ob

108
00:05:23,980 --> 00:05:28,330
‫eine E-Mail gültig ist, müssen wir nur die isEmail-Methode für

109
00:05:29,810 --> 00:05:32,030
‫das Validator-Objekt aufrufen, okay?

110
00:05:32,030 --> 00:05:34,380
‫Das kommt also wieder aus der Dokumentation, die

111
00:05:34,380 --> 00:05:38,160
‫ich Ihnen zuvor gezeigt habe, als wir dieses Modul zum ersten Mal verwendet haben.

112
00:05:38,160 --> 00:05:40,600
‫Wenn Sie also einen benutzerdefinierten Validator benötigen,

113
00:05:40,600 --> 00:05:42,960
‫können Sie in der Dokumentation

114
00:05:42,960 --> 00:05:46,540
‫nachsehen, ob es eine gute Funktion für Ihren Anwendungsfall gibt.

115
00:05:46,540 --> 00:05:49,340
‫In diesem Fall ist das also der Validator. E-Mail, und

116
00:05:49,340 --> 00:05:51,230
‫unsere Fehlermeldung wird

117
00:05:55,174 --> 00:05:57,540
‫"eine gültige E-Mail" sein, okay?

118
00:05:57,540 --> 00:05:59,800
‫Und wenn wir im nächsten Video Benutzer aus

119
00:05:59,800 --> 00:06:02,980
‫diesem Modell erstellen, werden wir das alles natürlich testen, um zu

120
00:06:02,980 --> 00:06:04,463
‫sehen, ob es funktioniert.

121
00:06:05,470 --> 00:06:08,420
‫Als nächstes möchte ich auch, dass der

122
00:06:08,420 --> 00:06:11,210
‫Benutzer grundsätzlich ein Foto hochladen kann.

123
00:06:11,210 --> 00:06:13,490
‫Und das speichern wir einfach in einem String.

124
00:06:13,490 --> 00:06:15,600
‫Aber es ist nicht erforderlich, okay?

125
00:06:15,600 --> 00:06:20,030
‫Ein Foto ist in den meisten Webanwendungen also normalerweise optional, und daher

126
00:06:20,030 --> 00:06:22,050
‫werden wir hier dasselbe tun.

127
00:06:22,050 --> 00:06:24,420
‫Wenn der Benutzer also ein

128
00:06:24,420 --> 00:06:27,580
‫Foto hochladen möchte, wird es irgendwo in unserem Dateisystem

129
00:06:27,580 --> 00:06:30,380
‫gespeichert und der Pfad zu diesem Foto

130
00:06:30,380 --> 00:06:32,910
‫wird dann in diesem Fotofeld gespeichert, okay?

131
00:06:32,910 --> 00:06:34,740
‫Das ist also ähnlich dem, was wir hier hatten.

132
00:06:34,740 --> 00:06:36,373
‫Denken Sie daran, wir

133
00:06:38,490 --> 00:06:40,340
‫haben, ja, wir haben imageCover,

134
00:06:40,340 --> 00:06:42,850
‫und das ist auch einfach der Pfad

135
00:06:42,850 --> 00:06:45,100
‫der Stelle in unserem Dateisystem, an

136
00:06:45,100 --> 00:06:47,343
‫der das Bild tatsächlich hochgeladen wird.

137
00:06:49,020 --> 00:06:50,300
‫Gut?

138
00:06:50,300 --> 00:06:51,570
‫Das ist also Foto.

139
00:06:51,570 --> 00:06:52,973
‫Und jetzt brauchen wir ein Passwort.

140
00:06:57,065 --> 00:07:01,120
‫Und das Passwort sollte wieder vom Typ String sein.

141
00:07:02,410 --> 00:07:03,963
‫Das ist nicht richtig.

142
00:07:04,850 --> 00:07:08,723
‫Und das Passwort ist natürlich erforderlich, oder?

143
00:07:09,690 --> 00:07:10,723
‫So wahr.

144
00:07:15,347 --> 00:07:16,737
‫"Geben Sie ein Passwort an. "Und

145
00:07:17,750 --> 00:07:20,900
‫wir werden auch eine sehr einfache Passwortregel aufstellen,

146
00:07:20,900 --> 00:07:23,420
‫die besagt, dass ein Passwort mindestens acht

147
00:07:23,420 --> 00:07:24,640
‫Zeichen haben sollte.

148
00:07:24,640 --> 00:07:25,933
‫Also, wie machen wir das?

149
00:07:26,840 --> 00:07:28,920
‫Nun, das ist ganz einfach.

150
00:07:28,920 --> 00:07:31,003
‫Alles, was wir tun müssen, ist

151
00:07:32,480 --> 00:07:34,880
‫minlength und in diesem Fall auf acht zu setzen.

152
00:07:34,880 --> 00:07:37,070
‫Und das ist eigentlich die einzige Passwortregel,

153
00:07:37,070 --> 00:07:38,650
‫die wir auferlegen werden.

154
00:07:38,650 --> 00:07:41,270
‫Und viele Apps haben all diese verrückten

155
00:07:41,270 --> 00:07:45,300
‫Regeln wie mindestens eine Zahl und ein Zeichen und ein Symbol,

156
00:07:45,300 --> 00:07:47,450
‫aber wir werden hier nichts davon

157
00:07:47,450 --> 00:07:49,250
‫implementieren, weil sich herausgestellt

158
00:07:49,250 --> 00:07:52,140
‫hat, dass das nicht wirklich effektiv ist, okay?

159
00:07:52,140 --> 00:07:53,750
‫Normalerweise sind die sichersten

160
00:07:53,750 --> 00:07:55,530
‫Passwörter die längsten, okay, und

161
00:07:55,530 --> 00:07:58,550
‫nicht diese mit den verrückten Symbolen und Zeichen und

162
00:07:58,550 --> 00:07:59,513
‫so weiter.

163
00:08:00,580 --> 00:08:03,610
‫Das reicht für das Passwort für den Moment,

164
00:08:03,610 --> 00:08:06,340
‫aber wir werden hier einige spezifischere Felder

165
00:08:06,340 --> 00:08:10,190
‫für das Passwort erstellen, wenn wir anfangen, Passwörter in der

166
00:08:10,190 --> 00:08:12,020
‫Datenbank zu verwalten, okay?

167
00:08:12,020 --> 00:08:14,403
‫Aber das reicht hier erstmal.

168
00:08:16,160 --> 00:08:18,407
‫Und jetzt heißt es passwordConfirm.

169
00:08:19,390 --> 00:08:22,230
‫Sie wissen also, wie Sie normalerweise beim Erstellen eines

170
00:08:22,230 --> 00:08:24,450
‫neuen Kontos in einer Webanwendung immer

171
00:08:24,450 --> 00:08:28,260
‫Ihr Passwort eingeben und es dann bestätigen müssen, um sicherzugehen, dass

172
00:08:28,260 --> 00:08:29,480
‫es gleich ist.

173
00:08:29,480 --> 00:08:31,523
‫Und dafür ist dieses Feld da.

174
00:08:32,410 --> 00:08:35,573
‫Also natürlich auch vom Typ String.

175
00:08:36,720 --> 00:08:38,723
‫Und natürlich ist es auch erforderlich.

176
00:08:45,081 --> 00:08:45,914
‫Okay.

177
00:08:45,914 --> 00:08:48,860
‫Und wieder werden wir etwas später hier

178
00:08:48,860 --> 00:08:52,210
‫in der schema-type-Option einige weitere Eigenschaften erstellen, okay?

179
00:08:52,210 --> 00:08:56,130
‫Insbesondere Validatoren, um zu sehen, ob das

180
00:08:56,130 --> 00:09:00,600
‫Bestätigungskennwort tatsächlich dasselbe ist wie das Hauptkennwort, in Ordnung?

181
00:09:00,600 --> 00:09:03,220
‫Aber für den Moment reicht dieses Schema eigentlich aus, und

182
00:09:03,220 --> 00:09:06,300
‫daher hat es diese Felder, die ich Sie in der Challenge

183
00:09:07,179 --> 00:09:08,529
‫gebeten habe, zu erstellen.

184
00:09:09,980 --> 00:09:12,360
‫Und jetzt müssen wir eigentlich nur noch

185
00:09:12,360 --> 00:09:14,703
‫das Modell aus dem Schema erstellen.

186
00:09:16,410 --> 00:09:18,930
‫Also der Benutzer, mit einem großen

187
00:09:18,930 --> 00:09:22,090
‫U, nur um der Konvention zu folgen, dass

188
00:09:22,090 --> 00:09:24,393
‫Modellvariablen normalerweise immer mit

189
00:09:25,490 --> 00:09:30,490
‫einem Großbuchstaben gekennzeichnet sind, dann Mungo. model, und übergeben Sie dann den Namen

190
00:09:31,400 --> 00:09:33,850
‫des Modells, und natürlich möchten wir,

191
00:09:34,910 --> 00:09:39,150
‫dass dieses "User" heißt und aus dem zuvor erstellten userSchema erstellt wird.

192
00:09:39,150 --> 00:09:44,150
‫Und dann Modul. exports auf Benutzer eingestellt.

193
00:09:45,300 --> 00:09:46,260
‫Und das ist es.

194
00:09:46,260 --> 00:09:49,230
‫Das ist unser einfaches userSchema, mit dem wir

195
00:09:49,230 --> 00:09:51,720
‫direkt im nächsten Video damit beginnen

196
00:09:51,720 --> 00:09:53,570
‫können, Benutzer zu erstellen.

197
00:09:53,570 --> 00:09:54,963
‫Also bis dahin.

