All language subtitles for 013 Adding Client-Side Page Guards (Route Protection)_Downloadly.ir_en

af Afrikaans
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
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
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian Download
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:02,070 --> 00:00:04,740 So of course, if we are not logged in 2 00:00:04,740 --> 00:00:08,260 we shouldn't be able to visit this profile page. 3 00:00:08,260 --> 00:00:10,950 And if we were on that page and we click log out 4 00:00:10,950 --> 00:00:12,920 we should be redirected 5 00:00:12,920 --> 00:00:16,100 and implementing that is never straight forward 6 00:00:16,100 --> 00:00:18,392 with next auth. 7 00:00:18,392 --> 00:00:21,590 All we have to do in the end is go to the pages 8 00:00:21,590 --> 00:00:25,860 which we wanna protect or restrict in some way. 9 00:00:25,860 --> 00:00:27,850 Like the profile page here. 10 00:00:27,850 --> 00:00:32,420 And then also use some next off functionality there. 11 00:00:32,420 --> 00:00:34,140 Either directly on that page 12 00:00:34,140 --> 00:00:36,390 or in a component of that page. 13 00:00:36,390 --> 00:00:38,930 like here to use a profile component. 14 00:00:38,930 --> 00:00:42,810 Here I want to redirect the way if we're not authenticated. 15 00:00:42,810 --> 00:00:45,280 And to implement this I will again import 16 00:00:45,280 --> 00:00:50,143 useSession from next-auth/client. 17 00:00:51,080 --> 00:00:54,410 And then again get access to my session data here. 18 00:00:54,410 --> 00:00:57,080 So here I'll then check session 19 00:00:57,080 --> 00:01:01,570 and maybe also loading extract these to pieces 20 00:01:01,570 --> 00:01:04,230 which we get when we call useSession. 21 00:01:05,570 --> 00:01:09,090 And now in the end, I want to do a couple of things. 22 00:01:09,090 --> 00:01:12,990 First of all, I want to check if we're loading 23 00:01:12,990 --> 00:01:16,510 if we're loading, then I and return a different content 24 00:01:16,510 --> 00:01:19,123 and show loading as text. 25 00:01:20,630 --> 00:01:23,100 By doing that if we saved this, 26 00:01:23,100 --> 00:01:26,010 I don't see all that content immediately 27 00:01:26,010 --> 00:01:28,030 if I shouldn't see it. 28 00:01:28,030 --> 00:01:32,150 Now to styling is a bit of to fix that. 29 00:01:32,150 --> 00:01:36,630 I'll give data class name of classes profile 30 00:01:36,630 --> 00:01:40,200 like this, and now at least it's centered. 31 00:01:40,200 --> 00:01:44,810 But at the moment I only see loading then it never changes. 32 00:01:44,810 --> 00:01:48,320 And indeed, that is how you useSession behaves. 33 00:01:48,320 --> 00:01:52,480 At least at the moment useSession returns to session 34 00:01:52,480 --> 00:01:55,730 and loading but there is this scenario 35 00:01:55,730 --> 00:01:57,560 that if you load a page, 36 00:01:57,560 --> 00:02:02,560 loading stays true and it doesn't really update. 37 00:02:02,920 --> 00:02:04,990 I'm not sure if it's a bug or a feature, 38 00:02:04,990 --> 00:02:06,530 but it is what it is. 39 00:02:06,530 --> 00:02:09,039 Thankfully, there is a way around that though. 40 00:02:09,039 --> 00:02:13,060 Besides useSession, there also is getSession. 41 00:02:14,670 --> 00:02:17,880 And the difference is that with useSession 42 00:02:17,880 --> 00:02:22,540 we immediately get this session and loading thing here, 43 00:02:22,540 --> 00:02:26,100 and then both session and loading could change 44 00:02:26,100 --> 00:02:28,830 if session data was fetched. 45 00:02:28,830 --> 00:02:31,780 If we have no session because we're logged out 46 00:02:31,780 --> 00:02:33,830 session will never change though 47 00:02:33,830 --> 00:02:37,010 and as we see loading unfortunately also doesn't change 48 00:02:37,010 --> 00:02:39,006 It stays true. 49 00:02:39,006 --> 00:02:40,740 getSession works differently. 50 00:02:40,740 --> 00:02:43,550 getSessions, sends a new request 51 00:02:43,550 --> 00:02:46,030 and gets to latest session data 52 00:02:46,030 --> 00:02:48,680 and we can then react the answer 53 00:02:48,680 --> 00:02:51,690 to the response for that request. 54 00:02:51,690 --> 00:02:55,050 And that allows us to manage our own loading state 55 00:02:55,050 --> 00:02:58,330 while forgetting the session and act accordingly. 56 00:02:58,330 --> 00:02:59,690 It's a bit more cumbersome 57 00:02:59,690 --> 00:03:01,920 requires more work from our side 58 00:03:01,920 --> 00:03:04,440 but it is the way around this issue 59 00:03:04,440 --> 00:03:05,863 which we have here. 60 00:03:06,910 --> 00:03:10,330 And it's not too difficult to implement in the end. 61 00:03:10,330 --> 00:03:14,780 We just need to manage our own state with use state. 62 00:03:14,780 --> 00:03:18,560 So we should import use state from react. 63 00:03:18,560 --> 00:03:21,800 And that will be our own loading state. 64 00:03:21,800 --> 00:03:25,890 So here I can manage is loading 65 00:03:25,890 --> 00:03:28,620 and set is loading. 66 00:03:28,620 --> 00:03:31,550 And actually we can set this to true initially 67 00:03:31,550 --> 00:03:35,033 to well start in that loading state. 68 00:03:36,220 --> 00:03:38,890 Then we can manage a number piece of data 69 00:03:38,890 --> 00:03:41,030 and that would be our session, 70 00:03:41,030 --> 00:03:42,853 which initially is undefined. 71 00:03:44,030 --> 00:03:47,610 So here we have the loaded session 72 00:03:47,610 --> 00:03:50,970 and set loaded session 73 00:03:50,970 --> 00:03:53,510 and now we can use effect, 74 00:03:53,510 --> 00:03:57,410 does use fact hook, which we also have to import from react 75 00:03:57,410 --> 00:04:01,443 to get the session when this component is rendered. 76 00:04:02,550 --> 00:04:04,840 So here in this effect function, 77 00:04:04,840 --> 00:04:06,730 I will call getSession 78 00:04:07,740 --> 00:04:10,780 so what I'm importing here from next-auth/client, 79 00:04:10,780 --> 00:04:15,780 I'll execute this and this will then return a promise. 80 00:04:16,160 --> 00:04:17,750 So here we can use it then 81 00:04:17,750 --> 00:04:19,982 or use a sync await for that 82 00:04:19,982 --> 00:04:22,830 we would wrap it into an extra function though, 83 00:04:22,830 --> 00:04:26,670 since we shouldn't make that effect function a sync. 84 00:04:26,670 --> 00:04:29,390 Hence here, I'll just work with then 85 00:04:29,390 --> 00:04:34,390 and I will get my session here eventually as our argument. 86 00:04:35,610 --> 00:04:39,270 And now here session may be null if we don't have a session. 87 00:04:39,270 --> 00:04:43,160 So if next off determines that this user is not logged in 88 00:04:43,160 --> 00:04:45,810 or it will be an object with the session data 89 00:04:45,810 --> 00:04:48,140 If the opposite is the case. 90 00:04:48,140 --> 00:04:51,080 And since here, we only care about whether 91 00:04:51,080 --> 00:04:53,190 we have a session or not 92 00:04:53,190 --> 00:04:57,001 the only thing we need to do here is call setloadedsession 93 00:04:57,001 --> 00:04:59,550 and set this to session once we're done 94 00:04:59,550 --> 00:05:04,550 and set is loading to false here eventually Like this, 95 00:05:05,610 --> 00:05:08,300 Now we don't use useSession anymore here 96 00:05:08,300 --> 00:05:11,490 because it didn't work as it should here 97 00:05:11,490 --> 00:05:14,313 and therefore now we have this approach and stat. 98 00:05:15,300 --> 00:05:17,750 Now what's the benefit of this approach? 99 00:05:17,750 --> 00:05:20,650 Well, now we can use our own isloading state here 100 00:05:20,650 --> 00:05:22,910 to show this loading message 101 00:05:22,910 --> 00:05:27,580 and we can now react to isloading being false 102 00:05:27,580 --> 00:05:31,460 So to loading being done and us not having a session. 103 00:05:31,460 --> 00:05:33,860 We can redirect a way then. 104 00:05:33,860 --> 00:05:35,740 And actually, if that's our goal 105 00:05:35,740 --> 00:05:39,080 instead of managing that extra session state 106 00:05:39,080 --> 00:05:41,560 if we don't need the session for anything else 107 00:05:41,560 --> 00:05:43,840 then navigating a way. 108 00:05:43,840 --> 00:05:46,640 Then the only thing we have to do here 109 00:05:46,640 --> 00:05:49,490 is check inside of this 110 00:05:49,490 --> 00:05:53,250 Then block, if session is not truthy. 111 00:05:53,250 --> 00:05:55,090 So if we don't have a session 112 00:05:55,090 --> 00:05:57,810 and then that case we navigate away. 113 00:05:57,810 --> 00:06:00,980 So set is loading, but if we don't have a session, 114 00:06:00,980 --> 00:06:04,700 I will actually navigate a way by using window location href 115 00:06:04,700 --> 00:06:07,280 which changes the URL in the browser 116 00:06:07,280 --> 00:06:10,600 and changing this to auth for example. 117 00:06:10,600 --> 00:06:12,740 So now if we don't find a session, 118 00:06:12,740 --> 00:06:15,093 we navigate a way with this code. 119 00:06:16,440 --> 00:06:19,250 Otherwise, eventually loading will be false 120 00:06:19,250 --> 00:06:20,840 and we do have a session. 121 00:06:20,840 --> 00:06:22,710 Then we rendered this content 122 00:06:24,220 --> 00:06:26,160 And With that work around implemented 123 00:06:26,160 --> 00:06:28,370 If we now go back and I reload, 124 00:06:28,370 --> 00:06:30,470 you see this page loads. 125 00:06:30,470 --> 00:06:33,350 If I log out on the apprehend I'm redirected. 126 00:06:33,350 --> 00:06:36,260 And if I now manually visit profile, 127 00:06:36,260 --> 00:06:39,430 I also am redirected eventually. 128 00:06:39,430 --> 00:06:44,430 Now we do see the average page content flash here 129 00:06:44,610 --> 00:06:46,700 for a brief moment. 130 00:06:46,700 --> 00:06:47,700 And the reason for that 131 00:06:47,700 --> 00:06:52,080 is me setting set as loading to false here, no matter what. 132 00:06:52,080 --> 00:06:54,740 actually I want to do this in the else case here, 133 00:06:54,740 --> 00:06:57,520 if we do have a session we stay on this page 134 00:06:57,520 --> 00:07:00,660 and only then I want to set as loading to false. 135 00:07:00,660 --> 00:07:04,020 If I do that and go to slash profile, 136 00:07:04,020 --> 00:07:05,910 we only see loading briefly 137 00:07:05,910 --> 00:07:07,480 and we see loading briefly 138 00:07:07,480 --> 00:07:09,800 because we do have that brief moment 139 00:07:09,800 --> 00:07:14,640 where we don't know yet whether we are authenticated or not. 140 00:07:14,640 --> 00:07:18,480 But with that, we implemented the desired behavior here 141 00:07:18,480 --> 00:07:19,970 and we need his work around 142 00:07:19,970 --> 00:07:22,970 because of how useSession works. 143 00:07:22,970 --> 00:07:26,400 It fulfills its purpose in the header 144 00:07:26,400 --> 00:07:28,700 and it updates the UI correctly there. 145 00:07:28,700 --> 00:07:30,810 But if we rely on the differences 146 00:07:30,810 --> 00:07:33,060 between being in a loading state 147 00:07:33,060 --> 00:07:36,070 and not having a session or not having a session 148 00:07:36,070 --> 00:07:38,010 because we're not authenticated 149 00:07:38,010 --> 00:07:40,650 directly after loading a page. 150 00:07:40,650 --> 00:07:43,250 In that case, useSession didn't help us 151 00:07:43,250 --> 00:07:45,400 and this is what (indistinct) does. 152 00:07:45,400 --> 00:07:48,450 it's not the only way of solving this problem though 11873

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