Pārlūkot izejas kodu

Redirect to expected page after logging in

yoyo837 7 gadi atpakaļ
vecāks
revīzija
0eaad1db4b
3 mainītis faili ar 24 papildinājumiem un 3 dzēšanām
  1. 11 1
      src/layouts/UserLayout.js
  2. 12 1
      src/models/login.js
  3. 1 1
      src/router.js

+ 11 - 1
src/layouts/UserLayout.js

@@ -31,6 +31,16 @@ const copyright = (
   </Fragment>
 );
 
+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}
                 />
               ))}
-              <Redirect exact from="/user" to="/user/login" />
+              <Redirect from="/user" to={getLoginPathWithRedirectPath()} />
             </Switch>
           </div>
           <GlobalFooter links={links} copyright={copyright} />

+ 12 - 1
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 }) {

+ 1 - 1
src/router.js

@@ -26,7 +26,7 @@ function RouterConfig({ history, app }) {
             path="/"
             render={props => <BasicLayout {...props} />}
             authority={['admin', 'user']}
-            redirectPath="/user/login"
+            redirectPath={`/user/login?redirect=${encodeURIComponent(window.location.href)}`}
           />
         </Switch>
       </ConnectedRouter>