-
Notifications
You must be signed in to change notification settings - Fork 32
/
apiClientDeploy.js
76 lines (54 loc) · 1.96 KB
/
apiClientDeploy.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import axios from "axios";
import { withAuth } from '../reducers'
import store from '../store'
import {refreshAccessToken} from '../actions/authActions'
import {isRefreshTokenExpired} from '../reducers/'
store.subscribe(listener)
function select(state) {
return state.auth
}
function listener() {
var auth = select(store.getState())
if (auth.access) {
// console.log('api client got header')
axios.defaults.headers.common['Authorization'] = "Bearer " + auth.access.token;
}
}
export var serverAddress = 'changeme'
export var Server = axios.create({
baseURL: 'changeme/api/',
headers: {
'Content-Type': 'application/json'
},
timeout: 30000,
});
Server.interceptors.request.use(function(request) {
// console.log('axios sending request',request)
return request
}, function(error) {
// console.log('axios error sending request',error)
})
Server.interceptors.response.use(function (response) {
// console.log('axios got response',response)
return response;
}, function (error) {
// console.log('axios retrying')
const originalRequest = error.config;
if (error.response.status === 401 && !originalRequest._retry && !isRefreshTokenExpired(store.getState())) {
originalRequest._retry = true;
const auth = select(store.getState())
const refreshToken = auth.refresh.token
// console.log('retrying')
// store.dispatch(refreshAccessToken(refreshToken))
return Server.post(serverAddress+'/api/auth/token/refresh/', { refresh:refreshToken })
.then((response) => {
store.dispatch({type: "REFRESH_ACCESS_TOKEN_FULFILLED", payload: response.data})
// console.log('setting refreshed access token in retry',response.data)
axios.defaults.headers.common['Authorization'] = 'Bearer ' + response.data.access;
originalRequest.headers['Authorization'] = 'Bearer ' + response.data.access;
return Server(originalRequest);
});
}
return Promise.reject(error);
});
export default {serverAddress, Server}