All language subtitles for 019 Logging out Users_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:00,910 --> 00:00:02,380 Welcome back. 2 00:00:02,380 --> 00:00:05,510 So in this video, you're gonna learn a super secure way 3 00:00:05,510 --> 00:00:06,983 of logging out users. 4 00:00:08,580 --> 00:00:12,110 So up until this point, when we wanted to delete a user, 5 00:00:12,110 --> 00:00:15,233 we would simply delete the cookie from our browser. 6 00:00:16,640 --> 00:00:17,570 Right? 7 00:00:17,570 --> 00:00:19,600 So something like this, 8 00:00:19,600 --> 00:00:21,190 and then remove it. 9 00:00:21,190 --> 00:00:24,020 However, the thing is that we created this cookie 10 00:00:24,020 --> 00:00:26,490 as an http only cookie. 11 00:00:26,490 --> 00:00:27,580 Remember that, 12 00:00:27,580 --> 00:00:30,420 and so that means that we cannot manipulate this cookie 13 00:00:30,420 --> 00:00:32,729 in any way in our browser. 14 00:00:32,729 --> 00:00:33,930 So we cannot change it, 15 00:00:33,930 --> 00:00:35,903 and we can also not delete it. 16 00:00:36,820 --> 00:00:40,580 So let's just quickly take a look at that place in the code 17 00:00:40,580 --> 00:00:41,643 where we did that. 18 00:00:42,730 --> 00:00:44,170 So in the auth controller 19 00:00:45,316 --> 00:00:48,830 up there where we actually create that cookie 20 00:00:49,930 --> 00:00:52,103 so that is right here. 21 00:00:53,810 --> 00:00:56,910 And so again, remember, that this means that we can not 22 00:00:56,910 --> 00:01:00,350 manipulate the cookie in the browser in any way. 23 00:01:00,350 --> 00:01:01,760 Not even destroy it. 24 00:01:01,760 --> 00:01:03,220 So delete it. 25 00:01:03,220 --> 00:01:07,510 So if we want to keep using this super secure way here 26 00:01:07,510 --> 00:01:09,290 of storing cookies, 27 00:01:09,290 --> 00:01:12,730 then how are we going to be able to actually log out users 28 00:01:12,730 --> 00:01:14,260 on our website? 29 00:01:14,260 --> 00:01:17,300 Because usually with JWT authentication 30 00:01:17,300 --> 00:01:18,820 we just delete the cookie 31 00:01:18,820 --> 00:01:21,000 or the token from local storage. 32 00:01:21,000 --> 00:01:25,400 But well, again, that's not possible when using it this way. 33 00:01:25,400 --> 00:01:28,240 And so what we're gonna do instead is to create a 34 00:01:28,240 --> 00:01:31,940 very simple log out route that will simply send back a new 35 00:01:31,940 --> 00:01:34,340 cookie with the exact same name 36 00:01:34,340 --> 00:01:36,170 but without the token. 37 00:01:36,170 --> 00:01:38,810 And so that will then override the current cookie that we 38 00:01:38,810 --> 00:01:41,970 have in the browser with one that has the same name 39 00:01:41,970 --> 00:01:43,740 but no token. 40 00:01:43,740 --> 00:01:46,440 And so when that cookie is then sent along with 41 00:01:46,440 --> 00:01:49,560 the next request, then we will not be able to identify 42 00:01:49,560 --> 00:01:51,960 the user as being logged in. 43 00:01:51,960 --> 00:01:55,430 And so this will effectively then log out the user. 44 00:01:55,430 --> 00:01:57,140 And also were gonna give this cookie 45 00:01:57,140 --> 00:01:59,580 a very short expiration time. 46 00:01:59,580 --> 00:02:02,300 And so this will effectively be a little bit like 47 00:02:02,300 --> 00:02:03,500 deleting the cookie 48 00:02:03,500 --> 00:02:07,920 but with a very clever workaround like this, okay? 49 00:02:07,920 --> 00:02:11,203 So let's do that here, right after log in. 50 00:02:16,740 --> 00:02:20,480 So again when we're doing token based authentication 51 00:02:20,480 --> 00:02:22,770 we usually never need an end point like this 52 00:02:25,050 --> 00:02:30,020 but when we want to send a super secure cookie like we do 53 00:02:30,020 --> 00:02:31,920 well, then we have to do it like this. 54 00:02:32,770 --> 00:02:36,900 So, again, on the response we set the cookie, 55 00:02:36,900 --> 00:02:40,220 and the secret is to give it the exact same name. 56 00:02:40,220 --> 00:02:41,930 So just as I mentioned before, 57 00:02:41,930 --> 00:02:44,450 and that is jwt. 58 00:02:44,450 --> 00:02:47,800 So just like here, okay? 59 00:02:47,800 --> 00:02:50,700 But here, we then send the token, 60 00:02:50,700 --> 00:02:54,460 but now we will send simply some dummy text. 61 00:02:54,460 --> 00:02:56,113 So let's say logged out, 62 00:02:58,130 --> 00:02:59,530 and then the cookie options. 63 00:03:02,320 --> 00:03:04,280 So an expire date, 64 00:03:04,280 --> 00:03:05,893 like in 10 seconds from now. 65 00:03:07,550 --> 00:03:09,970 So let's create a new date 66 00:03:09,970 --> 00:03:10,900 based on 67 00:03:11,940 --> 00:03:14,210 date.now 68 00:03:15,610 --> 00:03:17,290 plus 10 seconds. 69 00:03:17,290 --> 00:03:20,173 So that's 10 times 1000. 70 00:03:21,660 --> 00:03:26,060 And also I'm going to set it, again, to http only. 71 00:03:26,060 --> 00:03:27,600 Set to true, 72 00:03:27,600 --> 00:03:30,330 but we do not need to set it as secure, 73 00:03:30,330 --> 00:03:32,900 because in this case there is no sensitive data 74 00:03:32,900 --> 00:03:34,833 that anyone can get a hold of. 75 00:03:36,560 --> 00:03:38,083 Here we're missing the comma, 76 00:03:39,560 --> 00:03:42,803 and so now all we need to do is send this response back. 77 00:03:43,660 --> 00:03:46,100 So status 200 78 00:03:50,730 --> 00:03:53,143 and let's simply mark it as success here. 79 00:03:57,000 --> 00:04:00,930 Then in our route we need to add it, of course, as well 80 00:04:00,930 --> 00:04:02,740 so that's at the user route 81 00:04:04,470 --> 00:04:06,853 so let's do it right here after log in, 82 00:04:07,900 --> 00:04:11,220 but this one will actually be a get request 83 00:04:11,220 --> 00:04:13,130 because we're not going to send any data 84 00:04:13,130 --> 00:04:14,660 along with the request 85 00:04:14,660 --> 00:04:16,410 we're not changing anything, 86 00:04:16,410 --> 00:04:19,190 we actually simply get a cookie. 87 00:04:19,190 --> 00:04:21,730 And so that name actually makes sense. 88 00:04:21,730 --> 00:04:23,853 Or that verb actually makes sense. 89 00:04:24,860 --> 00:04:26,580 So log out, 90 00:04:26,580 --> 00:04:31,580 and so now we are good to actually hit that route 91 00:04:31,610 --> 00:04:34,463 just like we did here with our Axios library. 92 00:04:37,420 --> 00:04:39,110 So export, 93 00:04:39,110 --> 00:04:40,590 log out, 94 00:04:40,590 --> 00:04:41,950 or actually const first 95 00:04:47,320 --> 00:04:48,980 and so just like before 96 00:04:48,980 --> 00:04:50,790 we're using a try catch block 97 00:04:53,260 --> 00:04:56,140 which in this case is not really that important 98 00:04:56,140 --> 00:04:59,270 because there can not really be an error while logging out, 99 00:04:59,270 --> 00:05:00,270 right? 100 00:05:00,270 --> 00:05:02,420 But anyway, just in case, for example, 101 00:05:02,420 --> 00:05:04,140 we have no internet connection. 102 00:05:04,140 --> 00:05:07,800 So in that case, we then will get a nice error 103 00:05:07,800 --> 00:05:09,910 and let's actually do that first here. 104 00:05:09,910 --> 00:05:11,060 So show error 105 00:05:16,570 --> 00:05:17,570 logging out 106 00:05:20,010 --> 00:05:21,520 try again. 107 00:05:21,520 --> 00:05:23,730 Okay, but this here, as I said, 108 00:05:23,730 --> 00:05:25,393 should not happen that often. 109 00:05:26,330 --> 00:05:27,170 So instead 110 00:05:28,370 --> 00:05:29,203 let's 111 00:05:30,060 --> 00:05:31,973 do our request with Axios. 112 00:05:33,810 --> 00:05:34,643 All right. 113 00:05:37,760 --> 00:05:39,610 And so the method this time is get 114 00:05:41,980 --> 00:05:43,120 and the URL is 115 00:05:44,030 --> 00:05:45,523 similar to what we have here, 116 00:05:46,950 --> 00:05:48,030 But it is 117 00:05:49,480 --> 00:05:50,313 log out. 118 00:05:52,177 --> 00:05:56,140 And then as the next step, let's also reload the page. 119 00:05:56,140 --> 00:05:58,180 So that's what we always do manually 120 00:05:58,180 --> 00:06:00,400 when we delete a cookie, right? 121 00:06:00,400 --> 00:06:03,500 And so here of course we need to do it programatically. 122 00:06:03,500 --> 00:06:04,333 Right? 123 00:06:04,333 --> 00:06:05,550 And we need to do it here 124 00:06:05,550 --> 00:06:09,780 because since this is an Ajax request we can not do it 125 00:06:09,780 --> 00:06:10,990 on the back end side. 126 00:06:10,990 --> 00:06:13,100 So we can't do it with express. 127 00:06:13,100 --> 00:06:16,420 And so we need to, of course, do it manually here. 128 00:06:16,420 --> 00:06:17,350 Right? 129 00:06:17,350 --> 00:06:20,680 Otherwise we would technically be logged out 130 00:06:20,680 --> 00:06:23,320 but our user menu would still reflect 131 00:06:23,320 --> 00:06:25,950 so it would still show that we are logged in. 132 00:06:25,950 --> 00:06:29,120 And so of course, we simply need to reload the page 133 00:06:29,120 --> 00:06:31,950 which would then send the invalid cookie basically 134 00:06:31,950 --> 00:06:33,150 to the server, 135 00:06:33,150 --> 00:06:36,140 so that one that we just received without a token 136 00:06:36,140 --> 00:06:38,190 and then we are no longer logged in, 137 00:06:38,190 --> 00:06:42,303 and therefore then our user menu will disappear, okay? 138 00:06:43,210 --> 00:06:46,150 So let's do that if there was a success. 139 00:06:46,150 --> 00:06:51,150 So just like before, rest.data.status. 140 00:06:52,720 --> 00:06:56,540 And so in this end point, we also send back 141 00:06:57,430 --> 00:06:59,140 the status set to success, 142 00:06:59,140 --> 00:07:02,040 and so we can once more test for that here. 143 00:07:02,040 --> 00:07:03,800 And so if this is the case 144 00:07:03,800 --> 00:07:06,290 well we actually don't even need this 145 00:07:06,290 --> 00:07:11,180 so in this case widow location.reload. 146 00:07:11,180 --> 00:07:13,520 And then something really important is that we actually 147 00:07:13,520 --> 00:07:16,260 need to set it to true here, 148 00:07:16,260 --> 00:07:19,070 and that will then force a reload from the server 149 00:07:19,070 --> 00:07:22,280 and not from browser cache, all right? 150 00:07:22,280 --> 00:07:24,830 Now and of course we need to mark it here as async, 151 00:07:26,080 --> 00:07:27,710 and okay. 152 00:07:27,710 --> 00:07:30,350 So this part here is really important again 153 00:07:30,350 --> 00:07:32,930 because otherwise it might simply load the same page 154 00:07:32,930 --> 00:07:33,770 from the cache 155 00:07:33,770 --> 00:07:37,070 which would then still have our user menu up there. 156 00:07:37,070 --> 00:07:38,970 But of course that's not what we want, 157 00:07:38,970 --> 00:07:42,243 we really want a fresh page coming down from the server. 158 00:07:43,540 --> 00:07:44,720 All right? 159 00:07:44,720 --> 00:07:47,020 So we have our log out function 160 00:07:47,020 --> 00:07:51,560 and now in the index we basically need to now trigger it 161 00:07:51,560 --> 00:07:53,700 once we hit that button. 162 00:07:53,700 --> 00:07:56,463 So let's create an element here first. 163 00:07:59,470 --> 00:08:00,830 So the log out button 164 00:08:02,080 --> 00:08:04,830 document.querySelector 165 00:08:10,786 --> 00:08:14,203 and remember how we created this element. 166 00:08:15,660 --> 00:08:17,783 So that's here. 167 00:08:19,350 --> 00:08:20,976 So this one. 168 00:08:20,976 --> 00:08:23,110 So we're selecting now by this class. 169 00:08:23,110 --> 00:08:26,910 All right, and we could of course used an id as well here, 170 00:08:26,910 --> 00:08:30,240 but that's not really important, okay? 171 00:08:30,240 --> 00:08:33,760 What matters here is to now say 172 00:08:33,760 --> 00:08:35,712 if there is a log out button, 173 00:08:39,980 --> 00:08:44,980 then logOutButton.addEventListener. 174 00:08:45,720 --> 00:08:48,650 So we want it to listen to all events happening 175 00:08:48,650 --> 00:08:52,330 on that button whenever there is a click. 176 00:08:52,330 --> 00:08:54,370 So we're waiting for the click event 177 00:08:54,370 --> 00:08:57,460 and when that happens we then call the log out function 178 00:08:58,740 --> 00:09:00,800 which we didn't import yet, 179 00:09:00,800 --> 00:09:02,650 so let's add that here. 180 00:09:02,650 --> 00:09:06,023 So log in and log out. 181 00:09:07,680 --> 00:09:10,223 All right, and that should actually be it. 182 00:09:11,290 --> 00:09:14,570 So, let's test it now. 183 00:09:14,570 --> 00:09:17,240 Reload it again just to be sure, 184 00:09:17,240 --> 00:09:18,740 and now 185 00:09:18,740 --> 00:09:20,870 Oh, we get error logging out. 186 00:09:20,870 --> 00:09:22,253 Try again, why is that. 187 00:09:26,650 --> 00:09:30,710 Well, let's try to get a better look at the error. 188 00:09:30,710 --> 00:09:33,130 But what's important is that actually all of this 189 00:09:33,130 --> 00:09:34,283 is already working. 190 00:09:35,480 --> 00:09:36,970 So this event listener here 191 00:09:39,207 --> 00:09:42,407 and also this log out function is kind of doing its job. 192 00:09:44,360 --> 00:09:45,500 So let's just do 193 00:09:46,880 --> 00:09:51,383 console.log error.response. 194 00:09:55,370 --> 00:09:58,310 So let's reload this here. 195 00:09:58,310 --> 00:10:00,223 Should kind of happen automatically. 196 00:10:01,330 --> 00:10:02,343 All right. 197 00:10:03,350 --> 00:10:04,703 So try that again. 198 00:10:06,820 --> 00:10:08,480 So what is happening here 199 00:10:12,500 --> 00:10:16,493 so cast to object id failed for value log out. 200 00:10:17,880 --> 00:10:20,180 So that's very weird. 201 00:10:20,180 --> 00:10:21,523 Take a look at that route. 202 00:10:23,360 --> 00:10:24,523 Oh, of course, 203 00:10:25,910 --> 00:10:27,750 that's a serious mistake. 204 00:10:27,750 --> 00:10:29,223 Should be log in of course. 205 00:10:31,110 --> 00:10:34,933 Okay, but this kind of course, again, happen all the time. 206 00:10:36,490 --> 00:10:38,423 So let's reload this here. 207 00:10:42,240 --> 00:10:43,733 And try this again. 208 00:10:44,680 --> 00:10:46,700 And now we're getting something here. 209 00:10:46,700 --> 00:10:48,200 Now it's still and error, 210 00:10:48,200 --> 00:10:50,160 but that's no problem at all. 211 00:10:50,160 --> 00:10:52,750 So we have a JSON web token error 212 00:10:52,750 --> 00:10:55,810 because our JSON web token is malformed. 213 00:10:55,810 --> 00:10:57,890 And so it's coming, as you can see, 214 00:10:57,890 --> 00:11:00,610 from the is logged in middleware. 215 00:11:00,610 --> 00:11:04,323 And so we can kind of guess why that is, right? 216 00:11:05,530 --> 00:11:09,290 So let's go back add our auth controller. 217 00:11:09,290 --> 00:11:11,410 And so the JSON web token that we're basically 218 00:11:11,410 --> 00:11:14,430 sending now is this here, right? 219 00:11:14,430 --> 00:11:15,960 So this logged out. 220 00:11:15,960 --> 00:11:17,520 And so then here in 221 00:11:18,370 --> 00:11:23,040 the isLoggedIn that will then basically trigger an error. 222 00:11:23,040 --> 00:11:27,170 So here in JSON web token verify, right? 223 00:11:27,170 --> 00:11:29,420 And since this entire function here is wrapped 224 00:11:29,420 --> 00:11:33,070 in this catchASync it will send this error down to all 225 00:11:33,070 --> 00:11:35,100 global error handling middleware. 226 00:11:35,100 --> 00:11:38,290 And that will then create this error which in this case 227 00:11:38,290 --> 00:11:40,240 we do not want, remember? 228 00:11:40,240 --> 00:11:41,368 So in this isLoggedIn middleware we do not want 229 00:11:41,368 --> 00:11:45,220 to cause any errors. 230 00:11:45,220 --> 00:11:47,480 And so, let's actually fix that 231 00:11:47,480 --> 00:11:50,520 and so we're going to remove this catchASync from here 232 00:11:51,490 --> 00:11:55,090 because we do not want to catch any Async errors. 233 00:11:55,090 --> 00:11:57,640 Instead what we want to do is to basically 234 00:11:57,640 --> 00:11:59,200 catch them locally 235 00:11:59,200 --> 00:12:02,083 and then if there's an error simply say next. 236 00:12:03,300 --> 00:12:05,240 Like this, okay? 237 00:12:05,240 --> 00:12:06,363 So let's do that. 238 00:12:08,350 --> 00:12:10,813 So wrap all of this into a try. 239 00:12:14,170 --> 00:12:15,133 Close it here. 240 00:12:18,750 --> 00:12:19,890 Well, something else wrong. 241 00:12:19,890 --> 00:12:23,303 Ah! Probably we are just missing the catch block. 242 00:12:27,520 --> 00:12:32,010 And so in this case we want to go to the next middleware. 243 00:12:32,010 --> 00:12:35,463 So basically saying that there is no logged in user. 244 00:12:36,910 --> 00:12:37,743 Right? 245 00:12:38,970 --> 00:12:41,543 So, let's test it again. 246 00:12:42,510 --> 00:12:45,283 Go back, oh , and now we're no longer logged in. 247 00:12:47,900 --> 00:12:49,590 So log in. 248 00:12:49,590 --> 00:12:51,103 That was successful. 249 00:12:52,160 --> 00:12:54,093 And now straight away let's log out. 250 00:12:55,210 --> 00:12:59,110 Ah! Beautiful! Now it works correctly. 251 00:12:59,110 --> 00:13:02,160 And so this time what happened here is that of course 252 00:13:02,160 --> 00:13:04,160 this verification here failed 253 00:13:04,160 --> 00:13:07,730 because that JSON web token was not in a format that 254 00:13:07,730 --> 00:13:09,560 this algorithm expected. 255 00:13:09,560 --> 00:13:12,380 But what happened in this case is that the error was 256 00:13:12,380 --> 00:13:15,020 not catched using our catchASync function 257 00:13:15,020 --> 00:13:18,470 but instead it then went straight to catch err, 258 00:13:18,470 --> 00:13:21,480 which then went straight to the next middleware. 259 00:13:21,480 --> 00:13:23,790 All right, great! 260 00:13:23,790 --> 00:13:26,800 So if we now take a look at our cookies, 261 00:13:26,800 --> 00:13:30,743 well we have one in use that probably has already expired. 262 00:13:31,840 --> 00:13:35,810 So you see it only has this life of 10 seconds 263 00:13:35,810 --> 00:13:38,050 and so if I reload this page now actually 264 00:13:40,130 --> 00:13:41,680 then is should already be gone. 265 00:13:43,700 --> 00:13:46,350 So you see zero cookies in use. 266 00:13:46,350 --> 00:13:48,800 Okay, and that's actually all we have to do 267 00:13:48,800 --> 00:13:51,583 in order to log out the user from our website. 19563

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