fastapi-jwt-auth
fastapi-jwt-auth copied to clipboard
new access token, not updateded on brower
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"}
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();
});