Skip to content

Commit 8ac8d13

Browse files
committed
Login and interceptor complete
1 parent 87b79a8 commit 8ac8d13

File tree

7 files changed

+3854
-44
lines changed

7 files changed

+3854
-44
lines changed

djsr/frontend/src/axiosApi.js

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,32 +12,32 @@ const axiosInstance = axios.create({
1212
}
1313
});
1414

15-
// axiosInstance.interceptors.response.use(
16-
// response => response,
17-
// error => {
18-
// const originalRequest = error.config;
19-
//
20-
// if (error.response.status === 401) {
21-
// const refresh_token = localStorage.getItem('refresh_token');
22-
//
23-
// return axiosInstance
24-
// .post('/token/refresh/', {refresh: refresh_token})
25-
// .then((response) => {
26-
//
27-
// localStorage.setItem('access_token', response.data.access);
28-
// localStorage.setItem('refresh_token', response.data.refresh);
29-
//
30-
// axiosInstance.defaults.headers['Authorization'] = "JWT " + response.data.access;
31-
// originalRequest.headers['Authorization'] = "JWT " + response.data.access;
32-
//
33-
// return axios(originalRequest);
34-
// })
35-
// .catch(err => {
36-
// console.log(err)
37-
// });
38-
// }
39-
// return Promise.reject(error);
40-
// }
41-
// );
15+
axiosInstance.interceptors.response.use(
16+
response => response,
17+
error => {
18+
const originalRequest = error.config;
19+
20+
if (error.response.status === 401 && error.response.statusText === "Unauthorized") {
21+
const refresh_token = localStorage.getItem('refresh_token');
22+
23+
return axiosInstance
24+
.post('/token/refresh/', {refresh: refresh_token})
25+
.then((response) => {
26+
27+
localStorage.setItem('access_token', response.data.access);
28+
localStorage.setItem('refresh_token', response.data.refresh);
29+
30+
axiosInstance.defaults.headers['Authorization'] = "JWT " + response.data.access;
31+
originalRequest.headers['Authorization'] = "JWT " + response.data.access;
32+
33+
return axiosInstance(originalRequest);
34+
})
35+
.catch(err => {
36+
console.log(err)
37+
});
38+
}
39+
return Promise.reject(error);
40+
}
41+
);
4242

4343
export default axiosInstance

djsr/frontend/src/components/hello.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ class Hello extends Component {
1111
this.getMessage = this.getMessage.bind(this)
1212
}
1313

14-
getMessage(){
14+
async getMessage(){
1515
try {
16-
let response = axiosInstance.get('/hello/');
16+
let response = await axiosInstance.get('/hello/');
1717
const message = response.data.hello;
1818
this.setState({
1919
message: message,
@@ -29,10 +29,7 @@ class Hello extends Component {
2929
// It's not the most straightforward thing to run an async method in componentDidMount
3030

3131
// Version 1 - no async: Console.log will output something undefined.
32-
const messageData1 = this.getMessage();
33-
console.log("messageData1: ", JSON.stringify(messageData1, null, 4));
34-
35-
32+
this.getMessage();
3633
}
3734

3835
render(){

djsr/frontend/src/components/login.js

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,40 @@ class Login extends Component {
88

99
this.handleChange = this.handleChange.bind(this);
1010
this.handleSubmit = this.handleSubmit.bind(this);
11+
this.handleSubmitWThen = this.handleSubmitWThen.bind(this);
1112
}
1213

1314
handleChange(event) {
1415
this.setState({[event.target.name]: event.target.value});
1516
}
1617

17-
handleSubmit(event) {
18+
handleSubmitWThen(event){
19+
event.preventDefault();
20+
axiosInstance.post('/token/obtain/', {
21+
username: this.state.username,
22+
password: this.state.password
23+
}).then(
24+
result => {
25+
axiosInstance.defaults.headers['Authorization'] = "JWT " + result.data.access;
26+
localStorage.setItem('access_token', result.data.access);
27+
localStorage.setItem('refresh_token', result.data.refresh);
28+
}
29+
).catch (error => {
30+
throw error;
31+
})
32+
}
33+
34+
async handleSubmit(event) {
1835
event.preventDefault();
1936
try {
20-
const data = axiosInstance.post('/token/obtain/', {
37+
const response = await axiosInstance.post('/token/obtain/', {
2138
username: this.state.username,
2239
password: this.state.password
2340
});
24-
axiosInstance.defaults.headers['Authorization'] = "JWT " + data.access;
25-
localStorage.setItem('access_token', data.access);
26-
localStorage.setItem('refresh_token', data.refresh);
27-
return data;
41+
axiosInstance.defaults.headers['Authorization'] = "JWT " + response.data.access;
42+
localStorage.setItem('access_token', response.data.access);
43+
localStorage.setItem('refresh_token', response.data.refresh);
44+
return response;
2845
} catch (error) {
2946
throw error;
3047
}

0 commit comments

Comments
 (0)