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

Поділитися
Вставка
  • Опубліковано 2 гру 2024

КОМЕНТАРІ • 25

  • @duocdev
    @duocdev  6 місяців тому

    🎥 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

  • @ThienNguyen-su2sp
    @ThienNguyen-su2sp 4 місяці тому

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

  • @LinhTran-om6qh
    @LinhTran-om6qh 6 місяців тому +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 3 місяці тому

      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 3 місяці тому

      @@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 Місяць тому

      @@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 Місяць тому

      @@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 Місяць тому

      @@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 6 місяців тому

    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 6 місяців тому

      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  6 місяців тому

      Đừ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 5 місяців тому

    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  5 місяців тому

      ở 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 5 місяців тому

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

  • @hoangpham1132
    @hoangpham1132 8 місяців тому

    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  8 місяців тому

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

  • @haivu-fy2vu
    @haivu-fy2vu 7 місяців тому

    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  7 місяців тому

      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 7 місяців тому

      @@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 7 місяців тому

    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  7 місяців тому

      Đượ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 7 місяців тому

      @@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  7 місяців тому +1

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

    • @EPICWILDERNESSCOOKING
      @EPICWILDERNESSCOOKING 7 місяців тому

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