24. Quản lý Access Token và Refresh Token trong Next.js | JWT Authentication Next | Khóa học Next.js

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 ก.พ. 2025

ความคิดเห็น • 27

  • @duocdev
    @duocdev  8 หลายเดือนก่อน

    🎥 Mình đã có khóa Next.js Super trả phí: duthanhduoc.com/courses/nextjs-super
    📕 Đây là link github khóa học Next.js Free, các bạn không cần phải submit email nữa: github.com/duthanhduoc/nextjs-free

  • @thevinhhuynh3333
    @thevinhhuynh3333 หลายเดือนก่อน

    Mình dùng cơ bản như axios interceptor + swr là ổn rồi.
    Làm kiểu RT trong server component khá rối. Mình có thử làm như bạn, về cơ bản thì đc nhưng khá nhiều case cần cover.
    Nếu đã tách source BE rồi thì các trường hợp cần SEO thì đa số k cần token đâu nhỉ ( theo mình biết là v, nếu có case nào thì góp ý cho mình ) nên mình nghĩ call api ở client là đc.
    Còn cần call api cho SEO thì k cần verify token -> call api trực tiếp trong Server Component và render ra data.
    NextJS làm SSR + Server Action thì mình nghĩ dành cho source nextjs thôi k cần BE
    Còn tach sourec BE và FE riêng thì dùng kiểu MERN Stack là được, cùng lắm thêm Server Component thôi.
    Có gì mng góp ý thêm

    • @AldenDang
      @AldenDang 8 วันที่ผ่านมา

      cốt lõi là xử lý ở route handler -> lưu Token ở cookie, với http only, tránh được XSS - hơn nhau ở cái http only, cái mà next client không bao giờ xử lý đc khi lưu ở các nơi truyền thống như local storage hoặc cookie không có http only

  • @ThienNguyen-su2sp
    @ThienNguyen-su2sp 6 หลายเดือนก่อน

    Xin cảm ơn anh đã chia sẽ những kiến thức này.

  • @LinhTran-om6qh
    @LinhTran-om6qh 8 หลายเดือนก่อน +1

    thế trường hợp bên client máy để cho ngủ, kiểu ng dùng đi đâu đó chơi, máy tự sleep nên client dừng chạy, tức là cái useEffect cũng dừng chạy luôn. Trong khoảng thời gian đó mà access token expire, rồi tới khi user mở máy lên lại ko gọi đc refresh api thì sao ạ?

    • @cosmic12333
      @cosmic12333 5 หลายเดือนก่อน

      khi đóng trình duyệt và access token expire thì access token cũng bị mất trong cookie nữa mình đang gặp case này chưa biết làm sao

    • @kid_katsu
      @kid_katsu 5 หลายเดือนก่อน

      @@cosmic12333 bạn phải check thêm trường hợp AT expire nhưng RT vẫn còn , thì lúc này cũng gửi request đến backend , thực tế refresh token api chỉ cần gửi RF ko cần gửi AT , lúc này backend sẽ cần destroy cả cặp AT và RT rồi tạo 1 cặp mới và return về cho FE

    • @kno.99
      @kno.99 3 หลายเดือนก่อน

      @@kid_katsuvậy câu hỏi đặt ra là khi nào nextjs nhận được RT khi người dùng vào trang lại để lấy AT mới?
      Nếu luôn luôn gửi RT thì không phải cách hay

    • @kid_katsu
      @kid_katsu 3 หลายเดือนก่อน +1

      @@kno.99 RT đã lấy từ lúc login và sẽ refresh cùng AT liên tục , nếu bạn vẫn trong lifetime thì nó vẫn nằm trong storage đó thôi . Còn khi quá lâu đến nổi RT expire thì lúc đó hết phiên đăng nhập r bắt buộc phải login lại thôi

    • @kno.99
      @kno.99 3 หลายเดือนก่อน

      @@kid_katsu Mình đang nói về vấn đề SSR ở nextjs, RT còn hạn được lưu ở cookie nhưng chỉ được gửi đến 1 endpoint nhất định, AT thì hết hạn, khi user vào page /home thì làm sao server get được AT mới trong khi không có RT?
      Nếu luôn luôn gửi RT để server có thể nhận được thì lại tăng rủi ro bảo mật do RT được gửi liên tục, nên có giải pháp nào cho trường hợp này không hay cần phải đổi cách khác nhỉ?

  • @atnguyentien7770
    @atnguyentien7770 8 หลายเดือนก่อน

    Anh ơi mình set cookie của AT và RT ở server thì ko cần phải cái router handler kia phải ko ạ. Mới cả mình xử lý cái expires của 2 cái đấy kiểu gì vậy ạ. Em xem 2 bài trước mà ko hiểu lắm. Mong anh giải đáp

    • @atnguyentien7770
      @atnguyentien7770 8 หลายเดือนก่อน

      ví dụ em làm thế này có được ko ạ. Em sẽ xét thời gian sống của cái cookie chứa access token lớn hơn thời gian sống của access token thì vì vậy khi mà access token hết hạn thì sẽ call api /refreshToken thì sẽ tạo đc một cookie mới với thời gian sống lại nhiều hơn cái access token mới

    • @duocdev
      @duocdev  8 หลายเดือนก่อน

      Đừng để hết hạn rồi mới call API em nhé, khó xử lý lắm. Tốt nhất thì gần hết hạn là refresh token. Còn server mà set cookie rồi thì ở client không cần lưu vào local storage thôi chứ vẫn phải nên dùng route handler lưu cookie cho next.js. Để next server biết đã login hay chưa

  • @thaoha5872
    @thaoha5872 7 หลายเดือนก่อน

    Anh ơi cho em hỏi, sau khi f5 thì làm sao mình lấy được expiresAt của cookie anh nhỉ?

    • @duocdev
      @duocdev  7 หลายเดือนก่อน

      ở server thì em có thể lấy thông qua cookie mà user request lên. Còn client thì em nên lưu access token vào local storage nữa để lấy nhé.
      Chi tiết cách quản lý ntn anh có hướng dẫn kỹ trong khóa Next.js có phí đó em

    • @thaoha5872
      @thaoha5872 7 หลายเดือนก่อน

      @@duocdev Dạ em cảm ơn anh

  • @hoangpham1132
    @hoangpham1132 10 หลายเดือนก่อน

    Mình nên lưu thông tin user từ api gọi access_token ở cookie, quản lý cùng tương tự với access token, refresh token luôn cho tiện, đỡ mất công gọi lại nhiều không bạn?

    • @duocdev
      @duocdev  10 หลายเดือนก่อน

      User thì lưu vào global state đi bạn.

  • @haivu-fy2vu
    @haivu-fy2vu 9 หลายเดือนก่อน

    anh cho em hỏi chút, khi login thành công thì server sẽ trả về refeshtoken và accesstoken, sau đó các request sau sẽ check nếu accesstoken hết hạn thì tự động gửi refeshtoken đã lưu khi login thành công lên server để server trả về accesstoken mới và refeshtoken thì cái refeshtoken server trả về này với cái refeshtoken ban đầu lúc login là 1 chứ anh nhỉ, và khi refeshtoken hết hạn thì cho về trang login luôn

    • @duocdev
      @duocdev  9 หลายเดือนก่อน

      là 2 em nhé, khi refresh token thì cái refresh token trả về là 1 refresh token mới có thời gian hết hạn trùng refresh token cũ. Đọc bài này của anh đi
      duthanhduoc.com/blog/p3-giai-ngo-authentication-jwt

    • @haivu-fy2vu
      @haivu-fy2vu 9 หลายเดือนก่อน

      @@duocdev liệu ở cái interceptors config axios ở phần instance.interceptors.request, em bắt hết lỗi hết hạn accesstoken và refreshToken dựa vào cái exp > Date.now() / 1000 được không anh nhỉ, không cần xử lý lỗi backend trả về ở instance.interceptors.response được không anh?

  • @EPICWILDERNESSCOOKING
    @EPICWILDERNESSCOOKING 9 หลายเดือนก่อน

    Ví dụ trên res của server mình res.cookie cả accessToken và refreshToken luôn để không phải xử lý dưới client nữa thì có hợp lý không anh

    • @duocdev
      @duocdev  9 หลายเดือนก่อน

      Được, đó là 1 trong 2 cách anh có nói trong khoá này đó em. Như vậy thì client quá khoẻ rồi

    • @EPICWILDERNESSCOOKING
      @EPICWILDERNESSCOOKING 9 หลายเดือนก่อน

      @@duocdev e mới test rồi sao nó chỉ hoạt động trên postman mà lại không hoạt đột trên client nhỉ hay e thiếu bước nào trên client, ở client e chưa xử lý gì về token cả

    • @duocdev
      @duocdev  9 หลายเดือนก่อน +1

      Sử dụng thuộc tính credential bên fetch api thì nó mới gửi cookie theo request

    • @EPICWILDERNESSCOOKING
      @EPICWILDERNESSCOOKING 9 หลายเดือนก่อน

      @@duocdev em cảm ơn anh nhé để e test lại