All language subtitles for 016 Updating the Current User_ Data_Downloadly.ir_en

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranî)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian Download
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:01,054 --> 00:00:04,059 In this lecture, we will allow the currently logged in 2 00:00:04,059 --> 00:00:07,283 user to manipulate his user data. 3 00:00:09,020 --> 00:00:11,910 And so now, by implementing user updates, 4 00:00:11,910 --> 00:00:14,880 we're really leaving the domain of authentication 5 00:00:14,880 --> 00:00:19,030 and are moving more into real user related stuff, okay? 6 00:00:19,030 --> 00:00:22,180 And so instead of using the authentication controller now, 7 00:00:22,180 --> 00:00:24,840 let's implement this updating functionality 8 00:00:24,840 --> 00:00:26,743 right in their userController. 9 00:00:27,850 --> 00:00:28,970 Okay, 10 00:00:28,970 --> 00:00:31,710 so we have a bunch of handlers, so of routes, 11 00:00:31,710 --> 00:00:35,270 that are not really implemented here, okay? 12 00:00:35,270 --> 00:00:37,420 But let's leave them aside for now 13 00:00:37,420 --> 00:00:40,553 and create our new handler function down here. 14 00:00:42,800 --> 00:00:45,143 And this one is gonna be called updateMe. 15 00:00:48,312 --> 00:00:51,260 And so again, it's updateMe because it's for updating 16 00:00:51,260 --> 00:00:53,323 the currently authenticated user. 17 00:00:54,580 --> 00:00:56,620 Later on, we will then also implement 18 00:00:56,620 --> 00:01:00,070 this updateUser function here, but that is then 19 00:01:00,070 --> 00:01:03,680 for like an administrator to update all of the user data, 20 00:01:03,680 --> 00:01:07,490 while the user itself can only update, for now at least, 21 00:01:07,490 --> 00:01:09,293 the name and the email address. 22 00:01:12,180 --> 00:01:15,900 So, request, response, and next. 23 00:01:17,205 --> 00:01:20,205 (keyboard clacking) 24 00:01:22,550 --> 00:01:25,800 And we are actually doing this, so updating the user data, 25 00:01:25,800 --> 00:01:29,180 in a different route than updating the user password, 26 00:01:29,180 --> 00:01:32,040 well because usually in a typical web application 27 00:01:32,040 --> 00:01:33,773 that's always how it's done. 28 00:01:34,720 --> 00:01:36,370 So you have usually one place 29 00:01:36,370 --> 00:01:38,190 where you can update your password 30 00:01:38,190 --> 00:01:40,630 and then another place where you can update data 31 00:01:40,630 --> 00:01:43,700 about the user or the account itself. 32 00:01:43,700 --> 00:01:46,993 And so here, we're just basically following that pattern. 33 00:01:48,592 --> 00:01:52,410 So again, let's start by laying out our steps. 34 00:01:52,410 --> 00:01:54,140 And the first thing that we want to do here 35 00:01:54,140 --> 00:01:56,090 is to basically create an error 36 00:01:56,090 --> 00:01:58,703 if the user tries to update the password. 37 00:02:01,993 --> 00:02:05,737 So create error if user 38 00:02:07,330 --> 00:02:10,073 posts basically password data. 39 00:02:13,406 --> 00:02:17,980 But then if not, we simply need to update the user document. 40 00:02:20,610 --> 00:02:23,720 So simple enough, and let's of course start 41 00:02:23,720 --> 00:02:24,783 with the first one. 42 00:02:26,410 --> 00:02:28,180 Of course there will be a body 43 00:02:28,180 --> 00:02:30,220 where we're gonna pass in the data, 44 00:02:30,220 --> 00:02:33,933 and so if on that body there is data on password, 45 00:02:35,890 --> 00:02:37,929 or a password confirm... 46 00:02:37,929 --> 00:02:40,596 (keys clacking) 47 00:02:44,047 --> 00:02:45,350 Confirm. 48 00:02:45,350 --> 00:02:49,410 Well in that case, we want to return immediately 49 00:02:49,410 --> 00:02:51,833 and create a new Apperror. 50 00:02:53,920 --> 00:02:57,110 Oh and I guess we didn't yet implement it here, 51 00:02:57,110 --> 00:02:58,780 or actually require, 52 00:02:58,780 --> 00:03:00,663 so let's just grab it from here. 53 00:03:01,660 --> 00:03:02,730 So AppError... 54 00:03:04,360 --> 00:03:05,580 It's not here, 55 00:03:05,580 --> 00:03:07,400 so the userController... 56 00:03:11,550 --> 00:03:13,550 So AppError, here we go. 57 00:03:15,700 --> 00:03:20,700 So 'This route is not for password updates. 58 00:03:26,280 --> 00:03:29,623 'Please use /updateMYPassword.' 59 00:03:32,160 --> 00:03:34,960 So basically the route that we specified before. 60 00:03:34,960 --> 00:03:36,720 So updateMYPassword. 61 00:03:39,226 --> 00:03:42,753 And then also, a code 400 for a bad request. 62 00:03:46,150 --> 00:03:48,743 And let's actually try this one out right away. 63 00:03:49,921 --> 00:03:51,770 And for that just two things, 64 00:03:51,770 --> 00:03:54,133 first we need to send back a response, 65 00:03:56,230 --> 00:04:00,660 so let's say res.status(200) for okay, 66 00:04:00,660 --> 00:04:01,993 and then json, 67 00:04:07,130 --> 00:04:09,070 add the status as success. 68 00:04:09,070 --> 00:04:11,860 And later we will then also send the updated user, 69 00:04:11,860 --> 00:04:13,563 but let's leave that for later. 70 00:04:14,610 --> 00:04:16,839 So that's the response, and now we of course 71 00:04:16,839 --> 00:04:19,892 also need to add this route to our user Router. 72 00:04:21,880 --> 00:04:24,993 So that's of course similar to update my password, 73 00:04:26,390 --> 00:04:29,663 so router, and of course a patch, 74 00:04:32,066 --> 00:04:32,899 /updateMe, 75 00:04:35,370 --> 00:04:38,080 then again, it is a protected route 76 00:04:38,080 --> 00:04:42,120 so only the currently authenticated user can update 77 00:04:42,120 --> 00:04:43,603 the data of the current user. 78 00:04:45,420 --> 00:04:48,240 And so all of this is of course really secure, 79 00:04:48,240 --> 00:04:51,540 again because the ID of the user that is gonna be updated 80 00:04:51,540 --> 00:04:53,960 come from request.user, 81 00:04:53,960 --> 00:04:58,120 which was set by this protect middleware here, 82 00:04:58,120 --> 00:05:01,700 which in turn got the idea from the json web token, 83 00:05:01,700 --> 00:05:05,180 and since no one can change the ID in that json web token 84 00:05:05,180 --> 00:05:07,920 without knowing the secret, well we know 85 00:05:07,920 --> 00:05:11,260 that the ID is then safe because of that. 86 00:05:11,260 --> 00:05:13,993 And so because of this, everything here is safe. 87 00:05:16,342 --> 00:05:18,675 So, userController.updateME. 88 00:05:21,554 --> 00:05:22,471 Now okay... 89 00:05:24,050 --> 00:05:26,003 So let's test this now. 90 00:05:28,830 --> 00:05:30,883 Go ahead and copy this again. 91 00:05:34,530 --> 00:05:37,363 And first of all, let's set the authorization. 92 00:05:38,300 --> 00:05:41,520 Again from the Bearer Token 93 00:05:41,520 --> 00:05:43,770 and of course with this environment variable. 94 00:05:45,788 --> 00:05:48,470 Also it needs to be a patch request, 95 00:05:48,470 --> 00:05:50,653 and we need to specify a body. 96 00:05:53,740 --> 00:05:56,110 And I want to start by testing it, 97 00:05:56,110 --> 00:05:57,930 causing this error of course, 98 00:05:57,930 --> 00:05:59,653 and so let's specify a password, 99 00:06:06,170 --> 00:06:07,613 and then a name. 100 00:06:12,620 --> 00:06:15,883 So let's say that this is the name that we want to update, 101 00:06:17,030 --> 00:06:18,620 so let's save this here. 102 00:06:20,911 --> 00:06:23,361 And actually it is of course in the Users folder. 103 00:06:26,960 --> 00:06:28,973 User Data. 104 00:06:30,810 --> 00:06:32,750 And actually let's create a new folder here, 105 00:06:32,750 --> 00:06:35,670 and put the stuff that is related to authentication 106 00:06:35,670 --> 00:06:37,123 into its own folder. 107 00:06:39,998 --> 00:06:42,960 So up here, we create a new folder 108 00:06:42,960 --> 00:06:47,960 and call it Authentication. 109 00:06:48,150 --> 00:06:49,460 That's not correct. 110 00:06:49,460 --> 00:06:52,354 AH-THEN-TICATION. 111 00:06:52,354 --> 00:06:53,554 (chuckles) So that's it. 112 00:06:55,480 --> 00:06:58,593 And so the password is related to authentication, 113 00:06:59,550 --> 00:07:04,530 also resetting the password, forgetting the password, 114 00:07:04,530 --> 00:07:07,193 logging in, and signing out. 115 00:07:11,078 --> 00:07:13,245 So, let's close these two, 116 00:07:14,440 --> 00:07:16,800 and now log in as, 117 00:07:16,800 --> 00:07:18,600 or actually let's create a new user. 118 00:07:20,490 --> 00:07:22,043 So let's sign up here, 119 00:07:24,170 --> 00:07:28,600 as a normal user so we can get rid of these two here. 120 00:07:28,600 --> 00:07:33,150 And now I'm simply calling it, well, test again, all right? 121 00:07:33,150 --> 00:07:36,060 And let's take a look at what users we currently have 122 00:07:38,520 --> 00:07:40,100 in our database. 123 00:07:40,100 --> 00:07:41,950 So we have hello and admin, 124 00:07:41,950 --> 00:07:43,823 and so let's now use test. 125 00:07:47,400 --> 00:07:49,260 And I'm always again, using the same password 126 00:07:49,260 --> 00:07:50,483 to make it really easy. 127 00:07:52,310 --> 00:07:55,833 All right, we need to give the name as well, 128 00:07:59,530 --> 00:08:01,003 let's just call it J here. 129 00:08:03,180 --> 00:08:05,570 And now indeed we get our token, 130 00:08:05,570 --> 00:08:07,120 and we're already logged in, 131 00:08:07,120 --> 00:08:09,250 and so now when we update the user, 132 00:08:09,250 --> 00:08:12,083 that should be for this user that was just logged in. 133 00:08:13,734 --> 00:08:15,770 So I'm not trying to update and of course, 134 00:08:15,770 --> 00:08:19,180 no updating is yet implemented and so that's not gonna work. 135 00:08:19,180 --> 00:08:21,820 All I want to see is the error that should happen 136 00:08:21,820 --> 00:08:25,713 because I specified this password property here on the body. 137 00:08:27,361 --> 00:08:28,720 So let's try it out. 138 00:08:28,720 --> 00:08:31,973 And here we get this kind weird looking error, 139 00:08:33,190 --> 00:08:35,700 but I guess it is simply because we didn't 140 00:08:35,700 --> 00:08:37,150 actually update the route here, 141 00:08:37,150 --> 00:08:40,500 so remember I just copied a route, so the URL, 142 00:08:40,500 --> 00:08:42,159 and just pasted it here. 143 00:08:42,159 --> 00:08:46,610 But of course, it needs to be updateME. 144 00:08:46,610 --> 00:08:48,630 So let's try that again. 145 00:08:48,630 --> 00:08:51,617 And so now we actually get that error that we specified. 146 00:08:51,617 --> 00:08:53,627 "This route is not for password updates. 147 00:08:53,627 --> 00:08:56,300 "Please use /updateMyPassowrd." 148 00:08:56,300 --> 00:08:58,450 So great, that part is working, 149 00:08:58,450 --> 00:09:01,890 and it's also working that we need to be authenticated. 150 00:09:01,890 --> 00:09:05,700 Because let's say that we have no authentication, 151 00:09:05,700 --> 00:09:08,410 and so let's say that: No Auth. 152 00:09:08,410 --> 00:09:10,330 And so let's try that again now. 153 00:09:10,330 --> 00:09:12,867 And so indeed, "You are not logged in! 154 00:09:12,867 --> 00:09:15,157 "Please log in to get access." 155 00:09:17,300 --> 00:09:19,800 So just to prove you that our authentication 156 00:09:19,800 --> 00:09:21,853 is actually also doing its job here. 157 00:09:23,260 --> 00:09:25,450 But of course, we want our Bearer Token, 158 00:09:25,450 --> 00:09:27,933 and so now we get that other error. 159 00:09:29,990 --> 00:09:32,790 Great, so let's now go ahead implement 160 00:09:32,790 --> 00:09:36,943 the rest of the functionality for the updateMe handler. 161 00:09:38,170 --> 00:09:40,970 So updating the user document, 162 00:09:40,970 --> 00:09:43,910 and we could try to do it with user.safe. 163 00:09:43,910 --> 00:09:46,860 So just like before, basically getting the user 164 00:09:46,860 --> 00:09:49,430 then updating the properties, and then by the end, 165 00:09:49,430 --> 00:09:51,030 saving the document. 166 00:09:51,030 --> 00:09:53,500 But the problem with that is that there are some fields 167 00:09:53,500 --> 00:09:56,320 that are required which we're not updating, 168 00:09:56,320 --> 00:09:57,680 and then because of that, 169 00:09:57,680 --> 00:09:59,490 we will some error. 170 00:09:59,490 --> 00:10:01,330 And so just to quickly demonstrate to you, 171 00:10:01,330 --> 00:10:02,530 let me actually do that. 172 00:10:03,430 --> 00:10:06,403 Okay, so very quickly, getting the user here. 173 00:10:09,490 --> 00:10:14,490 So findbyId, so request.user as we already know, .id. 174 00:10:17,540 --> 00:10:22,540 And then let's say, user.name = 'Jonas' 175 00:10:25,582 --> 00:10:27,297 and then await user.save. 176 00:10:30,660 --> 00:10:33,763 But again you see that this will give us an error then. 177 00:10:35,277 --> 00:10:37,320 But for now let's also of course declare it 178 00:10:37,320 --> 00:10:38,763 as an async function. 179 00:10:45,700 --> 00:10:47,970 And all right. 180 00:10:47,970 --> 00:10:49,690 So let's test it now, 181 00:10:49,690 --> 00:10:52,780 but we should expect to see an error now. 182 00:10:52,780 --> 00:10:55,113 So let's of course get rid of this one, 183 00:10:58,910 --> 00:11:02,560 and indeed we get: "Please confirm your password". 184 00:11:02,560 --> 00:11:06,380 And so that's because passwordConfirm is a required field 185 00:11:06,380 --> 00:11:08,763 but we did of course not specify it. 186 00:11:09,770 --> 00:11:12,940 And so the safe method is not really the correct option 187 00:11:12,940 --> 00:11:14,760 in this case. 188 00:11:14,760 --> 00:11:16,560 So instead what we can do now is 189 00:11:16,560 --> 00:11:19,453 to actually use findById and update. 190 00:11:20,540 --> 00:11:23,560 So we could not use that before for all the reasons 191 00:11:23,560 --> 00:11:25,970 that I explained to you multiple times by now. 192 00:11:25,970 --> 00:11:28,460 But now since we're not dealing with passwords, 193 00:11:28,460 --> 00:11:32,380 but only with this non-sensitive data like name or email, 194 00:11:32,380 --> 00:11:36,263 we can now use findById and update. 195 00:11:38,810 --> 00:11:40,343 So, let's get rid of this. 196 00:11:42,380 --> 00:11:46,040 Let's also call it here updatedUser. 197 00:11:46,040 --> 00:11:48,950 And then in here, we need to pass not only the ID, 198 00:11:48,950 --> 00:11:51,400 but also the data that should be updated, 199 00:11:51,400 --> 00:11:53,040 and then some options. 200 00:11:53,040 --> 00:11:56,303 So the data, let's for now call it x here, 201 00:11:57,650 --> 00:11:59,140 and I'm telling you why in a second, 202 00:11:59,140 --> 00:12:02,250 and then the options that we want to pass in. 203 00:12:02,250 --> 00:12:04,180 And so that's just like before, 204 00:12:04,180 --> 00:12:07,240 the new option set to true, 205 00:12:07,240 --> 00:12:09,090 so that it returns the new object, 206 00:12:09,090 --> 00:12:12,033 so basically the updated object instead of the old one. 207 00:12:12,880 --> 00:12:16,393 And the also runValidators set to true. 208 00:12:17,670 --> 00:12:22,000 Because indeed we want the models to validate our document. 209 00:12:22,000 --> 00:12:25,490 So for example, if we put in an invalid email address, 210 00:12:25,490 --> 00:12:28,490 that should be catched by the Validator and return an error. 211 00:12:29,770 --> 00:12:34,770 Now why am I putting x here, and not simply request.body? 212 00:12:35,040 --> 00:12:37,510 Well that's because we actually do not want 213 00:12:37,510 --> 00:12:40,010 to update everything that's in the body, 214 00:12:40,010 --> 00:12:43,130 because let's say the user puts, in the body, 215 00:12:43,130 --> 00:12:44,513 the role for example. 216 00:12:46,550 --> 00:12:51,550 We could have body.role set to admin for example, 217 00:12:52,510 --> 00:12:55,040 and so this would then allow any user 218 00:12:55,040 --> 00:12:57,860 to change the role, for example, to administrator. 219 00:12:57,860 --> 00:13:00,200 And of course that can not be allowed. 220 00:13:00,200 --> 00:13:02,850 Or the user could also change their reset token, 221 00:13:02,850 --> 00:13:05,350 or when that reset token expires, 222 00:13:05,350 --> 00:13:08,290 and all of that should not be allowed of course. 223 00:13:08,290 --> 00:13:10,440 So doing something like this would 224 00:13:10,440 --> 00:13:12,520 of course be a huge mistake. 225 00:13:12,520 --> 00:13:14,773 And so we need to make sure that the object 226 00:13:14,773 --> 00:13:16,640 that we pass here, 227 00:13:16,640 --> 00:13:19,460 so again that object that will contain the data 228 00:13:19,460 --> 00:13:20,860 that's gonna be updated, 229 00:13:20,860 --> 00:13:23,540 only contains name and email, 230 00:13:23,540 --> 00:13:25,940 because for now these are the only fields 231 00:13:25,940 --> 00:13:27,623 that we want to allow to update. 232 00:13:28,640 --> 00:13:31,150 And so basically we want to filter the body 233 00:13:31,150 --> 00:13:34,370 so that in the end, it only contains name and email 234 00:13:34,370 --> 00:13:35,610 and nothing else. 235 00:13:35,610 --> 00:13:38,620 So if then the user tries to change the role, 236 00:13:38,620 --> 00:13:40,250 that will then be filtered out 237 00:13:40,250 --> 00:13:43,483 so that it never finds its way to our database. 238 00:13:44,769 --> 00:13:48,400 So what we want to do is to basically create a variable 239 00:13:48,400 --> 00:13:49,750 and let's say filteredBody, 240 00:13:52,400 --> 00:13:56,240 and then we're gonna create function in a second, 241 00:13:56,240 --> 00:13:58,620 but let's just already use it here, 242 00:13:58,620 --> 00:14:00,420 just so you see how it's gonna work. 243 00:14:01,450 --> 00:14:03,250 And then in here we pass the data, 244 00:14:03,250 --> 00:14:05,850 so the object that we want to filter, 245 00:14:05,850 --> 00:14:09,890 so req.body, because that's where all the data is, 246 00:14:09,890 --> 00:14:12,440 and then we pass a couple of arguments. 247 00:14:12,440 --> 00:14:15,170 One for each of the fields that we want to keep 248 00:14:15,170 --> 00:14:16,183 in the object. 249 00:14:17,950 --> 00:14:20,343 So we want to keep the field called name, 250 00:14:21,400 --> 00:14:23,653 and the field called email. 251 00:14:25,120 --> 00:14:28,790 And again, a bit later we might then add more fields here, 252 00:14:28,790 --> 00:14:30,910 for example later we might allow the user 253 00:14:30,910 --> 00:14:32,850 to upload an image. 254 00:14:32,850 --> 00:14:35,709 And of course that we then also need to update 255 00:14:35,709 --> 00:14:37,220 in the database. 256 00:14:37,220 --> 00:14:39,010 But for now, all we want to keep 257 00:14:39,010 --> 00:14:43,343 in the body is name and email and filter out all the rest. 258 00:14:45,410 --> 00:14:48,067 And so here, let's now use filteredBody, 259 00:14:49,730 --> 00:14:51,573 instead of x of course. 260 00:14:54,400 --> 00:14:57,200 And so now what we need to do is to actually implement 261 00:14:57,200 --> 00:15:00,833 this function which will take care of filtering the object. 262 00:15:02,640 --> 00:15:03,893 So let's do that here. 263 00:15:09,151 --> 00:15:09,984 FilterObj, 264 00:15:12,350 --> 00:15:15,050 which will take in an object 265 00:15:15,050 --> 00:15:18,853 and then the rest parameters for all the allowed fields. 266 00:15:21,320 --> 00:15:23,670 And so this will then basically create an array 267 00:15:23,670 --> 00:15:27,203 containing all of the arguments that we passed in. 268 00:15:28,690 --> 00:15:31,750 So basically that were passed in after this first one. 269 00:15:31,750 --> 00:15:36,750 So in that case, it is an array containing name and email. 270 00:15:39,610 --> 00:15:41,260 So what we need to do now is basically 271 00:15:41,260 --> 00:15:44,560 to loop through the object and for each element check 272 00:15:44,560 --> 00:15:46,240 if it's one of the allowed fields, 273 00:15:46,240 --> 00:15:49,110 and if it is, simply add it to a new object, 274 00:15:49,110 --> 00:15:51,160 that we're then gonna return in the end. 275 00:15:51,160 --> 00:15:53,840 And probably there are more efficient of better ways 276 00:15:53,840 --> 00:15:55,140 to implement this, 277 00:15:55,140 --> 00:15:56,990 but let's just do it very quick here. 278 00:15:58,810 --> 00:16:00,790 So we're gonna loop the object by saying 279 00:16:00,790 --> 00:16:04,893 Object.keys of the object that we pass in. 280 00:16:05,940 --> 00:16:08,210 So that's one of the easy ways to loop 281 00:16:08,210 --> 00:16:09,883 through an object in JavaScript. 282 00:16:12,612 --> 00:16:15,710 So, this here then basically returns an array 283 00:16:15,710 --> 00:16:17,560 containing all the key names, 284 00:16:17,560 --> 00:16:19,850 so the field names of this object, 285 00:16:19,850 --> 00:16:21,713 and then we can loop through them. 286 00:16:22,570 --> 00:16:24,023 Then our callback function. 287 00:16:24,960 --> 00:16:27,933 And for each element, this is what we're gonna do. 288 00:16:29,080 --> 00:16:32,680 So, if the allowed field array 289 00:16:33,680 --> 00:16:38,680 includes the current element, so the current field name, 290 00:16:38,840 --> 00:16:41,310 then we want to add that to a new object. 291 00:16:41,310 --> 00:16:43,533 So let's quickly create that one here, 292 00:16:44,580 --> 00:16:47,340 so const newObj 293 00:16:48,540 --> 00:16:50,260 which is empty for now, 294 00:16:50,260 --> 00:16:53,010 and in the end, that's the one that we're gonna return. 295 00:16:54,820 --> 00:16:57,500 So newObj. 296 00:16:57,500 --> 00:17:00,770 So if the current field is one of the allowed fields, 297 00:17:00,770 --> 00:17:05,770 well then newObj with the field name of the current field, 298 00:17:07,260 --> 00:17:10,970 should be equal to whatever is in the object 299 00:17:10,970 --> 00:17:13,742 at the current element, so the current field name. 300 00:17:15,329 --> 00:17:17,593 So don't if this looks a bit confusing, 301 00:17:18,460 --> 00:17:20,740 this is again just standard JavaScript, 302 00:17:20,740 --> 00:17:24,450 it has nothing to do with no JS or eXpress 303 00:17:24,450 --> 00:17:25,593 or anything like that. 304 00:17:26,810 --> 00:17:29,510 So again, all we do here is to basically loop 305 00:17:29,510 --> 00:17:32,090 through all the fields that are in the object 306 00:17:32,090 --> 00:17:33,710 and then for each field, we check 307 00:17:33,710 --> 00:17:35,700 if it's one of the allowed fields. 308 00:17:35,700 --> 00:17:39,300 And if it is, then we create a new field in the new object, 309 00:17:39,300 --> 00:17:40,610 of course with the same name, 310 00:17:40,610 --> 00:17:43,700 so still name element, with the exact same value 311 00:17:43,700 --> 00:17:46,317 as it has in the original object. 312 00:17:46,317 --> 00:17:49,193 And then in the end of course, we return that one. 313 00:17:51,880 --> 00:17:55,323 And so this should now all be working here. 314 00:17:56,260 --> 00:17:58,520 Then all we need to do in the end 315 00:17:58,520 --> 00:18:01,603 is to send that updated user to the client. 316 00:18:03,040 --> 00:18:04,083 So, user. 317 00:18:06,120 --> 00:18:11,120 Now of course, we need to put the udatedUser then here, 318 00:18:11,160 --> 00:18:15,400 give it a save again, and so now it should work. 319 00:18:15,400 --> 00:18:17,877 Se really what we did here was.. 320 00:18:21,310 --> 00:18:24,003 update the user last, and before we did that, 321 00:18:25,450 --> 00:18:30,450 we actually filtered out unwanted field names 322 00:18:34,490 --> 00:18:39,303 that are not allowed to be updated. 323 00:18:40,758 --> 00:18:42,460 So let's try that now. 324 00:18:42,460 --> 00:18:46,423 And this user here is a regular user, 325 00:18:47,780 --> 00:18:49,150 so we just created him, 326 00:18:49,150 --> 00:18:50,813 remember with the name of J. 327 00:18:51,920 --> 00:18:55,100 And so let's quickly take a look at Compass. 328 00:18:56,900 --> 00:19:00,870 So it's a normal user, with a name of J. 329 00:19:00,870 --> 00:19:02,450 And so let's now update then name, 330 00:19:02,450 --> 00:19:05,160 and also try to update the role, 331 00:19:05,160 --> 00:19:07,460 which again is not allowed. 332 00:19:07,460 --> 00:19:11,090 But to see if our code is working, let's try it. 333 00:19:11,090 --> 00:19:14,470 So there is the name already, and let's say 334 00:19:14,470 --> 00:19:15,970 we're a malicious user 335 00:19:15,970 --> 00:19:19,313 trying to change our role to admin. 336 00:19:20,620 --> 00:19:23,150 So, everything is correct I guess, 337 00:19:23,150 --> 00:19:25,190 so let's send this now, 338 00:19:25,190 --> 00:19:28,520 and indeed here is our updated object. 339 00:19:28,520 --> 00:19:32,150 So we get our new name, which is Jonas Schmedtmann, 340 00:19:32,150 --> 00:19:35,250 and then the role, which is still user. 341 00:19:35,250 --> 00:19:37,913 It didn't update the role to admin. 342 00:19:39,460 --> 00:19:42,380 Perfect. That's exactly what we wanted. 343 00:19:42,380 --> 00:19:46,230 So, give this a save and let's go back 344 00:19:46,230 --> 00:19:49,513 and actually with this we just finished this video. 345 00:19:50,590 --> 00:19:53,770 Next up, we will then implement a functionality 346 00:19:53,770 --> 00:19:55,913 of deleting the current user. 347 00:19:56,890 --> 00:20:00,730 So we worked on updating, next up we want to allow a user 348 00:20:00,730 --> 00:20:03,970 to basically delete himself when he no longer wants 349 00:20:03,970 --> 00:20:06,143 to be part of our application. 27066

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.