NextJS: 03-09 Cài đặt Protected Pages chỉ được truy cập khi đã đăng nhập

Поділитися
Вставка
  • Опубліковано 16 вер 2024
  • Khi dự án có một số trang yêu cầu đăng nhập thì mới xem được nội dung, mình sẽ setup như thế nào? 🤔
    Sử dụng useAuth hook
    Tạo component để quản lý việc render tuỳ vào logged in user
    Slide: drive.google.c...
    ---
    #nextjs
    #protected_pages
    #nextjs_tutorial
    ---
    VIDEO CHAPTERS:
    Made by: Sinh Bùi Đình
    Cảm ơn bạn nhiều nhé! ❤️
    00:14 Introduce install component AUTH for (Protected Pages)
    00:40 Explain setting page per page
    01:40 Explain setting by Layout
    02:15 Setting common component AUTH
    05:55 Idea check first loading in hook
    07:10 Handle protect page when loading done
    09:00 Flow check page about working with protect page
    12:10 Handle act when login success for see full thread protect page
    13:10 Apply Logout in layout have protect page
    14:50 Good point of SWR
    15:40 Issue when try to access protect page by router.push
    16:15 Different between access protect page by router.push from login after logout instead go direct
    17:20 Test all thread
    17:50 Test case apply mutate = null instead of {} when logout
    18:35 Test case apply mutate = undefined instead of {} when logout
    19:55 How to apply protect page
    ---
    Easy Frontend - Code xịn hơn mỗi ngày
    🔥 Khoá học Javascript: course.ezfront...
    🎁 Khoá học ReactJS: course.ezfront...
    🎯 Fan cứng Easy Frontend: / @easyfrontend
    ---
    💰 Ủng hộ mình làm videos thì đóng góp qua MoMo/ZaloPay: 0901 309 729 nhé
    ---
    Kết nối với mình:
    ✅ Follow facebook: / nvhauesmn
    🎉 Fan page: / learn.easyfrontend
    ❓ Group: / easyfrontend
    💻 Github: github.com/pau...
    💼 LinkedIn: / haunguyenmn

КОМЕНТАРІ • 45

  • @truyentranhvn1020
    @truyentranhvn1020 Рік тому +1

    anh ơi cho e hỏi mình có nhiều role nhiều acc thì mình làm sao có thể get `profile` được ạ ? e muốn truyền cái user_id khi mình login vào get `profile` mà k biết làm cách nào

    • @EasyFrontend
      @EasyFrontend  Рік тому

      hi em, cái đó em ko được phép làm vậy nha
      thông tin user là private, chỉ người đó mới xem được
      nên phía backend họ sẽ dựa vào token của em để biết user_id và từ đó trả về thông tin, chứ ko có vụ em truyền userId và trả về thông tin nhen.
      Trừ khi em đang làm dashboard admin hen, lúc đó sẽ dùng một API khác

  • @MinhHoang-ih3wt
    @MinhHoang-ih3wt 2 роки тому

    Hóng series này của anh hàng ngày

    • @EasyFrontend
      @EasyFrontend  2 роки тому +1

      yeahhh cảm ơn em nhiều nhiều nhen, cái này tốn time soạn tài liệu quá, nên ra hơi lâu hihi, em thông cảm nhen 😊

  • @vitdo6049
    @vitdo6049 Рік тому

    anh cho em hỏi cái TH mà token hết hạn trong khi trước đó mình đã login rồi thì làm thế nào để đẩy ra ngoài trang login ạ

  • @VuongNguyen-ix3sm
    @VuongNguyen-ix3sm 2 роки тому +1

    Anh ơi đoạn 5:38 cái em làm giống anh nhưng cái profile?.username của em nó cứ bảo "Object is of type 'unknown'." thì phải làm sao hả anh?

    • @EasyFrontend
      @EasyFrontend  2 роки тому

      hmm, bên anh thì ko có bị, hk biết em có miss gì hk ta?

    • @ngantang3775
      @ngantang3775 2 роки тому

      Mình làm cũng bị vậy

    • @NguyenMinh-nr8iv
      @NguyenMinh-nr8iv 2 роки тому

      bạn viết bằng ts thì phải khai báo kiểu trả về là any thì hết lỗi á =))

    • @VuongNguyen-ix3sm
      @VuongNguyen-ix3sm 2 роки тому

      @@NguyenMinh-nr8iv trời ý mình hỏi là ngoài kiểu any thì fix bằng cách nào khác ấy =))

    • @NguyenMinh-nr8iv
      @NguyenMinh-nr8iv 2 роки тому

      @@VuongNguyen-ix3sm thì thay vì any bạn khai báo kiểu mới rồi trả về cho nó kiểu bạn muốn thôi

  • @bonpham2103
    @bonpham2103 Рік тому

    nextjs ko có kiểu khai báo useRoutes như react hả anh, mỗi page phải vào từng component page và bọc lại bằng component Layout tương ứng với mỗi page hả anh

    • @EasyFrontend
      @EasyFrontend  Рік тому

      yeah nó ko có kiểu định nghĩa routes như bên reactjs em nhen hihi

  • @sinhbuiinh2248
    @sinhbuiinh2248 2 роки тому

    00:14 Introduce install component AUTH for (Protected Pages)
    00:40 Explain setting page per page
    01:40 Explain setting by Layout
    02:15 Setting common component AUTH
    05:55 Idea check first loading in hook
    07:10 Handle protect page when loading done
    09:00 Flow check page about working with protect page
    12:10 Handle act when login success for see full thread protect page
    13:10 Apply Logout in layout have protect page
    14:50 Good point of SWR
    15:40 Issue when try to access protect page by router.push
    16:15 Different between access protect page by router.push from login after logout instead go direct
    17:20 Test all thread
    17:50 Test case apply mutate = null instead of {} when logout
    18:35 Test case apply mutate = undefined instead of {} when logout
    19:55 How to apply protect page

  • @thongduong2200
    @thongduong2200 2 роки тому

    anh Hậu ơi cho em hỏi ở ( 18:53 ) mình đã mutate(undefined,false) thì profile là undefined rồi mà sao ở ( 18:45 ) mình lại còn cái profile nữa?. Em có thử test thì thấy nó vẫn work như mutate(null,false) nhưng có khác là firstLoading là true thoi màa

    • @EasyFrontend
      @EasyFrontend  2 роки тому

      hi Thông, cái này anh nghĩ do cơ chế của mutate nó hoạt động thôi em hen
      nó xem undefined là giá trị đb, và ko update gì hết, giữ nguyên giá trị hiện tại
      còn muốn reset thì phải dùng null
      Giờ em test lại thấy chạy đc, có thể nó để fix lỗi này á Thông 😉

  • @duchoangtrung7151
    @duchoangtrung7151 Рік тому

    Em chào anh, có cách nào khi chưa login, click vào button go to about thì để nó không re-render lại không ạ

    • @EasyFrontend
      @EasyFrontend  Рік тому

      hi Đức, anh chưa rõ câu hỏi của em lắm, em cho anh hỏi thêm cụ thể là mình mong muốn làm đc việc gì vậy em hen ?

  • @moona7095
    @moona7095 Рік тому

    anh ơi cho em hỏi giờ em làm protected page nên dùng cách này hay dùng _middleware ạ ?

    • @EasyFrontend
      @EasyFrontend  Рік тому +1

      hi em, anh thì hay dùng cách này, còn middleware thì anh chưa làm, nên hk rõ là sẽ làm ntn em nhen.

  • @NguyenLinh-cg6zm
    @NguyenLinh-cg6zm 2 роки тому

    anh Hậu ơi cho em hỏi case đã login, nhưng sửa url browser thành /login thì phải đá về / hoặc /dashboard. case này xử lý như thế nào vậy anh

    • @EasyFrontend
      @EasyFrontend  2 роки тому

      hi Linh, cái này em có thể cái useEffect ở login page, rồi em check điều kiện, nếu đã login thì redirect qua trang dashboard em nha 😉

  • @hunghuy2156
    @hunghuy2156 2 роки тому

    không có trong bài nhưng a Hậu cho e hỏi là sao e dùng biến trong .env.local ở các file trong API của next js toàn bị báo undefined vậy ạ. làm sao để truy cập vào .env.local ở api ạ anh. bên ngoài thì e vẫn sử dụng được bình thường ạ

    • @EasyFrontend
      @EasyFrontend  2 роки тому

      à sr em, mấy bữa nay bận lo đám cưới.

    • @EasyFrontend
      @EasyFrontend  2 роки тому

      phần biến môi trường, em để ý là nó dùng bên trình duyệt hay server nha.
      nextjs.org/docs/basic-features/environment-variables#exposing-environment-variables-to-the-browser
      em đọc link này, nếu biến môi trường dành cho browser thì phải có prefix là NEXT_PUBLIC_ nha

  • @sangnguyenngoc1744
    @sangnguyenngoc1744 2 роки тому

    anh Hậu cho e hỏi cái protect này anh làm test thôi chứ hầu như người ta kiểm tra dựa vào cookie đúng không a?

    • @EasyFrontend
      @EasyFrontend  2 роки тому

      hi Sang, cái này nó cũng tùy vào:
      - việc em xử lý bên server hay client
      - dùng jwt hay cookies
      thì mình sẽ xử lý tương ứng, tại mỗi project mỗi khác em nhen.
      Nếu là xử lý phía server thì mình sẽ check dựa trên cookies/jwt gửi lên từ client.
      Còn xử lý phía client thì đơn giản check local storage em nhen, hoặc em có thể check cookie phụ, kiểu cookie token thì em ko lấy đc òi, nhưng sẽ có thêm cookie phụ nói là đã login chẳng hạn, em có thể dùng nó để check phía client 😉

    • @sangnguyenngoc1744
      @sangnguyenngoc1744 2 роки тому

      @@EasyFrontend dạ tại e đang thắc mắc nếu làm như của a mỗi lần vô 1 page nó đều call lên serve để check đúng ko a

    • @EasyFrontend
      @EasyFrontend  2 роки тому

      @@sangnguyenngoc1744 à nó check lần đầu thôi em nhen, xong cache 1 tiếng, sau đó nó mới đi gọi lại lên server check nha em, em coi chỗ useAuth nha

  • @TaiNguyen-pc6vk
    @TaiNguyen-pc6vk 2 роки тому

    Chỗ cài đặt Proteced Pages này mình dùng access_token đã set trong cookies thay vì check username trong profile được không anh?
    Em không biết 2 cách này nó có điểm lợi như nào? Và em nghĩ mình sẽ dùng tuỳ trong hoàn cảnh và project. Mong anh có thể giải thích giúp em, nếu được thì cho em trường hợp khi nào dùng cách nào luôn ạ hihi. Em cảm ơn

    • @EasyFrontend
      @EasyFrontend  2 роки тому +1

      à trong cookies mình đã set http-only thì ko thể truy cập thì phía client được, nên em ko thể dựa vào đó mà check em nha. Nên đơn giản mình dùng một flag nào đó trong local storage / hoặc username như hiện tại là okie òi em nhen 😉

    • @TaiNguyen-pc6vk
      @TaiNguyen-pc6vk 2 роки тому

      @@EasyFrontend dạ cảm ơn anh Hậu em hiểu rồi ạ

    • @NguyenMinh-nr8iv
      @NguyenMinh-nr8iv 2 роки тому

      @@EasyFrontend mình có thể check ở server rediect trước mà ko cần phải loading không a

  • @enderws05
    @enderws05 Рік тому

    em đang theo series này mà giờ ra next 13 thì nên dùng 13 hay dùng lại next 12 ạ anh

    • @EasyFrontend
      @EasyFrontend  Рік тому +1

      em có thể dùng next 13 cũng đc nha, mấy cái features của 12 nó vẫn hoạt động đc bình thường hehe

    • @enderws05
      @enderws05 Рік тому

      @@EasyFrontend Dạ cám ơn anh Hậu ^^

  • @nguyentronghieu2366
    @nguyentronghieu2366 Рік тому

    Anh ơi mình custom nếu server trả về Unauthorized thì rediec ra trang login được k a.

    • @EasyFrontend
      @EasyFrontend  Рік тому

      hi Hiếu, hình như trong video có làm cái đó đúng hk em?

    • @nguyentronghieu2366
      @nguyentronghieu2366 Рік тому

      @@EasyFrontend dạ không ý em là lúc call api mà api trả về Unauthorized thì mình rediec lúc đó luôn á a

  • @NguyenMinh-nr8iv
    @NguyenMinh-nr8iv 2 роки тому

    sao a ko dùng _middleware của nextjs ạ

    • @EasyFrontend
      @EasyFrontend  2 роки тому +1

      hi Minh, anh làm video này trước khi có _middleware em nhen, với hiện tại nó mới beta nên đợi nó stable tí rồi hẳn dùng em nhé 😉

    • @lthrworld
      @lthrworld Рік тому

      @@EasyFrontend Chào Anh Hậu, anh có thể hướng dẫn thêm nguồn tài liệu về middleware trong nextjs không ạ, em đọc tài liệu trang web nextjs mà chưa bik sử dụng middleware như thế nào :((

  • @nguyentinh4127
    @nguyentinh4127 2 роки тому

    tuần này có video k hả anh :)

    • @EasyFrontend
      @EasyFrontend  2 роки тому

      à tuần này sẽ có videos em nhen, anh định hướng đc nội dung cho mấy chương tiếp theo òi, giờ code thử, xong là quay videos thôi em hehe 😊

    • @nguyentinh4127
      @nguyentinh4127 2 роки тому

      @@EasyFrontend háo hức quá ạ 😊