Skip to content

Commit e76e6ad

Browse files
author
root
committed
override the default logout from redux with localstorage
1 parent e324c4e commit e76e6ad

File tree

2 files changed

+61
-20
lines changed

2 files changed

+61
-20
lines changed

ui/app/actions/meta.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import axios from "axios";
2-
import { LOGIN_SUCCESS, login as _login, logout } from "redux-implicit-oauth2";
2+
import { LOGIN_SUCCESS, login as _login, logout as _logout } from "redux-implicit-oauth2";
33

44
import { selectAuthToken } from "../selectors";
55
import types from ".";
@@ -110,4 +110,8 @@ export const loginSuccess = (token, expiresAt) => dispatch =>
110110
expiresAt
111111
});
112112

113-
export { logout };
113+
export const logout = () => dispatch => {
114+
localStorage.removeItem("access_token");
115+
localStorage.removeItem("expires_at");
116+
dispatch(_logout());
117+
};

ui/app/components/Auth.js

Lines changed: 55 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,67 @@
1-
import { Component } from "react";
1+
import React from "react";
22
import { connect } from "react-redux";
3+
import { withRouter } from "react-router-dom";
34

45
import { fetchPermissions, loginSuccess } from "../actions/meta";
56
import { selectIsLoggedIn, selectLocationHash } from "../selectors";
6-
import { history } from "../config/store";
77

8-
class Auth extends Component {
8+
class Auth extends React.Component {
99
componentDidMount() {
1010
const {
11-
fetchPermissions,
1211
hash: { access_token, expires_in },
1312
isLoggedIn,
14-
loginSuccess
13+
loginSuccess,
14+
fetchPermissions,
15+
history,
16+
location
1517
} = this.props;
1618

19+
if (access_token) {
20+
const expiresAt = expires_in
21+
? Date.now() + parseInt(expires_in, 10) * 1000
22+
: null;
23+
24+
25+
loginSuccess(access_token, expiresAt);
26+
localStorage.setItem("access_token", access_token);
27+
if (expiresAt) localStorage.setItem("expires_at", expiresAt);
28+
29+
30+
fetchPermissions();
31+
32+
window.location.hash = "";
33+
history.replace(location.pathname);
34+
return;
35+
}
36+
37+
38+
if (!isLoggedIn) {
39+
const storedToken = localStorage.getItem("access_token");
40+
const storedExpiry = localStorage.getItem("expires_at");
41+
if (storedToken) {
42+
const storedExpiresAt = storedExpiry
43+
? parseInt(storedExpiry, 10)
44+
: null;
45+
if (!storedExpiresAt || storedExpiresAt > Date.now()) {
46+
loginSuccess(storedToken, storedExpiresAt);
47+
} else {
48+
// expired → clear out
49+
localStorage.removeItem("access_token");
50+
localStorage.removeItem("expires_at");
51+
}
52+
}
53+
}
54+
55+
1756
if (isLoggedIn) {
1857
fetchPermissions();
19-
} else if (access_token != null) {
20-
loginSuccess(access_token, expires_in);
21-
history.replace("/");
2258
}
2359
}
2460

25-
componentWillUpdate(nextProps, nextState) {
26-
const { fetchPermissions, isLoggedIn: wasLoggedIn } = this.props;
27-
const { isLoggedIn } = nextProps;
61+
componentDidUpdate(prevProps) {
2862

29-
if (!wasLoggedIn && isLoggedIn) {
30-
fetchPermissions();
63+
if (!prevProps.isLoggedIn && this.props.isLoggedIn) {
64+
this.props.fetchPermissions();
3165
}
3266
}
3367

@@ -37,10 +71,13 @@ class Auth extends Component {
3771
}
3872

3973
const mapStateToProps = state => ({
40-
hash: selectLocationHash(state),
41-
isLoggedIn: selectIsLoggedIn(state)
74+
hash: selectLocationHash(state),
75+
isLoggedIn: selectIsLoggedIn(state)
4276
});
4377

44-
export default connect(mapStateToProps, { fetchPermissions, loginSuccess })(
45-
Auth
46-
);
78+
export default withRouter(
79+
connect(
80+
mapStateToProps,
81+
{ fetchPermissions, loginSuccess }
82+
)(Auth)
83+
);

0 commit comments

Comments
 (0)