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)}`} />