Skip to content

Commit 03241cc

Browse files
Merge pull request #412 from engaging-computing/dev
v2.0.1 | Token Timeout Fix
2 parents dd76b99 + 75e654d commit 03241cc

4 files changed

Lines changed: 35 additions & 4 deletions

File tree

src/actions/authActions.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ export function logout() {
2020
return { type: types.LOGOUT };
2121
}
2222

23+
export function refreshToken(token) {
24+
return { type: types.REFRESH_TOKEN, token };
25+
}
26+
2327
export default {
2428
login,
25-
logout
29+
logout,
30+
refreshToken
2631
};

src/components/structural/header/Header.js

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ class Header extends Component {
5858
updateCollection: false,
5959
fetchCollection: false,
6060
socket: sockets(),
61-
savedSettings: []
61+
savedSettings: [],
62+
googleUser: undefined
6263
};
6364

6465
this.state.socket.on("update", () => {
@@ -200,10 +201,27 @@ class Header extends Component {
200201
//googleAuth.getAuthResponse().id_token;
201202
googleAuth.profileObj["uid"] = googleAuth.getAuthResponse().id_token;
202203
this.props.logging.login(googleAuth.profileObj);
203-
this.setState({ logMenuOpen: false });
204+
this.setState({ logMenuOpen: false, googleUser: googleAuth });
204205

205206
this.props.projectActions.asyncUserProj(this.props.user.uid);
206207
this.props.collectionActions.asyncCollections(this.props.user.uid);
208+
this.setRefreshTime(googleAuth.tokenObj.expires_at);
209+
}
210+
211+
setRefreshTime = (time) => {
212+
const oneMinute = 60*1000;
213+
let expiryTime = Math.max(
214+
oneMinute*5, //Default of 5 minutes
215+
time - Date.now() - oneMinute*5 // give 5 mins of breathing room
216+
);
217+
setTimeout(this.refreshToken, expiryTime);
218+
}
219+
220+
refreshToken = () => {
221+
this.state.googleUser.reloadAuthResponse().then((authResponse) => {
222+
this.props.logging.refreshToken(authResponse.id_token);
223+
this.setRefreshTime(authResponse.expires_at);
224+
});
207225
}
208226

209227
/**
@@ -399,7 +417,7 @@ class Header extends Component {
399417
if(!this.state.viewOnly) {
400418
this.props.actions.refresh(text, this.props.user ? this.props.user.uid : "anon");
401419
}
402-
this.setState({spinnerOpen: false});
420+
this.setState({spinnerOpen: false, saveOpen: false});
403421
this.state.socket.emit("save");
404422
return true;
405423
});

src/constants/ActionTypes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export const LOGIN = "LOGIN";
22
export const LOGOUT = "LOGOUT";
3+
export const REFRESH_TOKEN = "REFRESH_TOKEN";
34

45
export const SYNC_COURSES = "SYNC_COURSES";
56
export const LOAD_COURSE = "LOAD_COURSE";

src/reducers/user.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ export default function user(state = initial_state, action) {
1414
return {
1515
user: null
1616
};
17+
case types.REFRESH_TOKEN:
18+
return {
19+
user: {
20+
...state,
21+
uid: action.token
22+
}
23+
};
1724
default:
1825
return state;
1926
}

0 commit comments

Comments
 (0)