diff --git a/src/layouts/UserLayout.js b/src/layouts/UserLayout.js
index 447f44fbb5eb23217b443fb95c11da1e9c9b34ee..188ba102fb69cf83c5838df8946558f36a2f2437 100644
--- a/src/layouts/UserLayout.js
+++ b/src/layouts/UserLayout.js
@@ -31,6 +31,16 @@ const copyright = (
);
+function getLoginPathWithRedirectPath() {
+ const routePath = '/user/login';
+ const urlParams = new URL(window.location.href);
+ const redirect = urlParams.searchParams.get('redirect');
+ if (redirect) {
+ return `${routePath}?redirect=${encodeURIComponent(redirect)}`;
+ }
+ return routePath;
+}
+
class UserLayout extends React.PureComponent {
getPageTitle() {
const { routerData, location } = this.props;
@@ -66,7 +76,7 @@ class UserLayout extends React.PureComponent {
exact={item.exact}
/>
))}
-
+
diff --git a/src/models/login.js b/src/models/login.js
index ea9fd30af079595d69a14199d9310d184466e2b6..274621cb3c525915f9f360aa73243a1970fd2675 100644
--- a/src/models/login.js
+++ b/src/models/login.js
@@ -20,7 +20,18 @@ export default {
// Login successfully
if (response.status === 'ok') {
reloadAuthorized();
- yield put(routerRedux.push('/'));
+ const urlParams = new URL(window.location.href);
+ let redirect = urlParams.searchParams.get('redirect');
+ if (redirect) {
+ const redirectUrlParams = new URL(redirect);
+ if (redirectUrlParams.origin === urlParams.origin) {
+ redirect = redirect.substr(urlParams.origin.length);
+ } else {
+ window.location.href = redirect;
+ return;
+ }
+ }
+ yield put(routerRedux.push(redirect || '/'));
}
},
*logout(_, { put, select }) {
diff --git a/src/router.js b/src/router.js
index 3c3a9786c54fe131ac2d0bae101d69e85e904937..144c8267811f65b7e205b460b6211f810dfa5adb 100644
--- a/src/router.js
+++ b/src/router.js
@@ -26,7 +26,7 @@ function RouterConfig({ history, app }) {
path="/"
render={props => }
authority={['admin', 'user']}
- redirectPath="/user/login"
+ redirectPath={`/user/login?redirect=${encodeURIComponent(window.location.href)}`}
/>