fastapi-jwt-auth icon indicating copy to clipboard operation
fastapi-jwt-auth copied to clipboard

new access token, not updateded on brower

Open 0xdeepmehta opened this issue 3 years ago • 1 comments

I'm facing this issue I'm using firefox 84.0.1(64-bit) distro: Linux Mint python: 3.8

async def refresh(db:AsyncIOMotorClient = Depends(get_database), Authorize: AuthJWT = Depends()):
    Authorize.jwt_refresh_token_required()

    current_user = Authorize.get_jwt_subject()
    new_access_token = Authorize.create_access_token(subject=current_user, fresh=True)
    Authorize.set_access_cookies(new_access_token)

    return {"message":"Token has been refresh"}

image image

0xdeepmehta avatar Mar 26 '21 14:03 0xdeepmehta

I managed this with my frontend. I'm using Vuejs but it should be similar across javascript frameworks: State Management:

  [AUTH_REFRESH]: ({ commit }) => {
    return new Promise(resolve => {
      commit(AUTH_REQUEST);
      const url = "/api/auth/refresh";
      axios
        .post(
          url,
          {},
          {
            xsrfCookieName: "csrf_refresh_token",
            xsrfHeaderName: "X-CSRF-TOKEN",
            withCredentials: true
          }
        )
        .then(resp => {
          resolve(resp);
        })
        .catch(error => {
          console.log(error);
          commit(AUTH_CLEAR);
        });
    });
  },

main.js (inside of an axios interceptor to catch 401 errors):

      return store
        .dispatch("auth/AUTH_REFRESH")
        .then(() => {
          error.response.config.xsrfCookieName = "csrf_access_token";
          error.response.config.xsrfHeaderName = "X-CSRF-TOKEN";
          console.log(error.response.config);
          return axios(error.response.config);
        })
        .catch(error => {
          if (error.response.status !== 401) {
            return Promise.reject(error);
          } else {
            store.dispatch("auth/AUTH_LOGOUT");
            this.router.push("/");
            return Promise.reject(error);
          }
        })
        .finally(() => {
          createAxiosResponseInterceptor();
        });

SelfhostedPro avatar Apr 18 '21 17:04 SelfhostedPro