Skip to content

Commit b532ffd

Browse files
committed
Finalize axiosApi changes
1 parent a82670d commit b532ffd

File tree

3 files changed

+46
-41
lines changed

3 files changed

+46
-41
lines changed

djsr/djsr/settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@
139139
}
140140

141141
SIMPLE_JWT = {
142-
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
143-
'REFRESH_TOKEN_LIFETIME': timedelta(minutes=10),
142+
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=1),
143+
'REFRESH_TOKEN_LIFETIME': timedelta(minutes=2),
144144
'ROTATE_REFRESH_TOKENS': True,
145145
'BLACKLIST_AFTER_ROTATION': True,
146146
'ALGORITHM': 'HS256',

djsr/frontend/src/axiosApi.js

Lines changed: 43 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import axios from 'axios'
44

5+
const baseURL = 'http://127.0.0.1:8000/api/'
6+
57
const axiosInstance = axios.create({
6-
baseURL: 'http://127.0.0.1:8000/api/',
8+
baseURL: baseURL,
79
timeout: 5000,
810
headers: {
911
'Authorization': localStorage.getItem('access_token') ? "JWT " + localStorage.getItem('access_token') : null,
@@ -12,54 +14,57 @@ const axiosInstance = axios.create({
1214
}
1315
});
1416

17+
1518
axiosInstance.interceptors.response.use(
1619
response => response,
1720
error => {
18-
const originalRequest = error.config;
21+
const originalRequest = error.config;
1922

20-
if (!originalRequest._retry){
21-
originalRequest._retry = true;
22-
// test for token presence, no point in sending a request if token isn't present
23-
if (error.response.data.code === "token_not_valid" && error.response.status === 401 && error.response.statusText === "Unauthorized") {
24-
const refresh_token = localStorage.getItem('refresh_token');
23+
// Prevent infinite loops early
24+
if (error.response.status === 401 && originalRequest.url === baseURL+'token/refresh/') {
25+
window.location.href = '/login/';
26+
return Promise.reject(error);
27+
}
2528

26-
if (refresh_token){
27-
const tokenParts = JSON.parse(atob(refresh_token.split('.')[1]));
29+
if (error.response.data.code === "token_not_valid" &&
30+
error.response.status === 401 &&
31+
error.response.statusText === "Unauthorized")
32+
{
33+
const refreshToken = localStorage.getItem('refresh_token');
2834

29-
// exp date in token is expressed in seconds, while now() returns milliseconds:
30-
const now = Math.ceil(Date.now() / 1000);
31-
console.log(tokenParts.exp);
35+
if (refreshToken){
36+
const tokenParts = JSON.parse(atob(refreshToken.split('.')[1]));
3237

33-
if (tokenParts.exp > now) {
34-
return axiosInstance
35-
.post('/token/refresh/', {refresh: refresh_token})
36-
.then((response) => {
37-
38-
localStorage.setItem('access_token', response.data.access);
39-
localStorage.setItem('refresh_token', response.data.refresh);
40-
41-
axiosInstance.defaults.headers['Authorization'] = "JWT " + response.data.access;
42-
originalRequest.headers['Authorization'] = "JWT " + response.data.access;
38+
// exp date in token is expressed in seconds, while now() returns milliseconds:
39+
const now = Math.ceil(Date.now() / 1000);
40+
console.log(tokenParts.exp);
4341

44-
console.log("Tokens refreshed.")
45-
46-
return axiosInstance(originalRequest);
47-
})
48-
.catch(err => {
49-
console.log(err)
50-
});
42+
if (tokenParts.exp > now) {
43+
return axiosInstance
44+
.post('/token/refresh/', {refresh: refreshToken})
45+
.then((response) => {
46+
47+
localStorage.setItem('access_token', response.data.access);
48+
localStorage.setItem('refresh_token', response.data.refresh);
49+
50+
axiosInstance.defaults.headers['Authorization'] = "JWT " + response.data.access;
51+
originalRequest.headers['Authorization'] = "JWT " + response.data.access;
52+
53+
return axiosInstance(originalRequest);
54+
})
55+
.catch(err => {
56+
console.log(err)
57+
});
58+
}else{
59+
console.log("Refresh token is expired", tokenParts.exp, now);
60+
window.location.href = '/login/';
61+
}
5162
}else{
52-
console.log("Refresh token is expired", tokenParts.exp, now);
63+
console.log("Refresh token not available.")
64+
window.location.href = '/login/';
5365
}
54-
}else{
55-
console.log("Refresh token not available.")
56-
}
57-
}else{
58-
console.log("Do other API intercepting unrelated to Token Refreshment here.")
5966
}
60-
}else{
61-
console.log("Too many retries.")
62-
}
67+
6368

6469
// specific error handling done elsewhere
6570
return Promise.reject(error);

djsr/frontend/static/frontend/public/main.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)