mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	Merge pull request #730 from Unleash/feat/redirect
feat: add redirect params to /login
This commit is contained in:
		
						commit
						cd59d7d84b
					
				| @ -41,7 +41,6 @@ export const App = () => { | |||||||
|     const renderRoute = (route: any) => { |     const renderRoute = (route: any) => { | ||||||
|         if (route.type === 'protected') { |         if (route.type === 'protected') { | ||||||
|             const unauthorized = isUnauthorized(); |             const unauthorized = isUnauthorized(); | ||||||
| 
 |  | ||||||
|             return ( |             return ( | ||||||
|                 <ProtectedRoute |                 <ProtectedRoute | ||||||
|                     key={route.path} |                     key={route.path} | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| import { Route, Redirect } from 'react-router-dom'; | import { Route, useLocation, Redirect } from 'react-router-dom'; | ||||||
| 
 | 
 | ||||||
| const ProtectedRoute = ({ | const ProtectedRoute = ({ | ||||||
|     component: Component, |     component: Component, | ||||||
| @ -6,12 +6,15 @@ const ProtectedRoute = ({ | |||||||
|     renderProps = {}, |     renderProps = {}, | ||||||
|     ...rest |     ...rest | ||||||
| }) => { | }) => { | ||||||
|  |     const { pathname } = useLocation(); | ||||||
|  |     const loginLink = | ||||||
|  |         pathname.length > 1 ? `/login?redirect=${pathname}` : '/login'; | ||||||
|     return ( |     return ( | ||||||
|         <Route |         <Route | ||||||
|             {...rest} |             {...rest} | ||||||
|             render={props => { |             render={props => { | ||||||
|                 if (unauthorized) { |                 if (unauthorized) { | ||||||
|                     return <Redirect to={'/login'} />; |                     return <Redirect to={loginLink} />; | ||||||
|                 } else { |                 } else { | ||||||
|                     return <Component {...props} {...renderProps} />; |                     return <Component {...props} {...renderProps} />; | ||||||
|                 } |                 } | ||||||
|  | |||||||
| @ -15,7 +15,10 @@ import ConditionallyRender from '../../common/ConditionallyRender'; | |||||||
| import { Alert } from '@material-ui/lab'; | import { Alert } from '@material-ui/lab'; | ||||||
| import { useAuthDetails } from '../../../hooks/api/getters/useAuth/useAuthDetails'; | import { useAuthDetails } from '../../../hooks/api/getters/useAuth/useAuthDetails'; | ||||||
| 
 | 
 | ||||||
| const Authentication = () => { | interface IAuthenticationProps { | ||||||
|  |     redirect: string; | ||||||
|  | } | ||||||
|  | const Authentication = ({ redirect }: IAuthenticationProps) => { | ||||||
|     const { authDetails } = useAuthDetails(); |     const { authDetails } = useAuthDetails(); | ||||||
|     const params = useQueryParams(); |     const params = useQueryParams(); | ||||||
| 
 | 
 | ||||||
| @ -26,7 +29,7 @@ const Authentication = () => { | |||||||
|     if (authDetails.type === PASSWORD_TYPE) { |     if (authDetails.type === PASSWORD_TYPE) { | ||||||
|         content = ( |         content = ( | ||||||
|             <> |             <> | ||||||
|                 <PasswordAuth authDetails={authDetails} /> |                 <PasswordAuth authDetails={authDetails} redirect={redirect} /> | ||||||
|                 <ConditionallyRender |                 <ConditionallyRender | ||||||
|                     condition={!authDetails.defaultHidden} |                     condition={!authDetails.defaultHidden} | ||||||
|                     show={<SecondaryLoginActions />} |                     show={<SecondaryLoginActions />} | ||||||
| @ -34,13 +37,13 @@ const Authentication = () => { | |||||||
|             </> |             </> | ||||||
|         ); |         ); | ||||||
|     } else if (authDetails.type === SIMPLE_TYPE) { |     } else if (authDetails.type === SIMPLE_TYPE) { | ||||||
|         content = <SimpleAuth authDetails={authDetails} />; |         content = <SimpleAuth authDetails={authDetails} redirect={redirect} />; | ||||||
|     } else if (authDetails.type === DEMO_TYPE) { |     } else if (authDetails.type === DEMO_TYPE) { | ||||||
|         content = <DemoAuth authDetails={authDetails} />; |         content = <DemoAuth authDetails={authDetails} redirect={redirect} />; | ||||||
|     } else if (authDetails.type === HOSTED_TYPE) { |     } else if (authDetails.type === HOSTED_TYPE) { | ||||||
|         content = ( |         content = ( | ||||||
|             <> |             <> | ||||||
|                 <HostedAuth authDetails={authDetails} /> |                 <HostedAuth authDetails={authDetails} redirect={redirect} /> | ||||||
|                 <ConditionallyRender |                 <ConditionallyRender | ||||||
|                     condition={!authDetails.defaultHidden} |                     condition={!authDetails.defaultHidden} | ||||||
|                     show={<SecondaryLoginActions />} |                     show={<SecondaryLoginActions />} | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ import { useAuthUser } from '../../../hooks/api/getters/useAuth/useAuthUser'; | |||||||
| import useToast from '../../../hooks/useToast'; | import useToast from '../../../hooks/useToast'; | ||||||
| import { formatUnknownError } from '../../../utils/format-unknown-error'; | import { formatUnknownError } from '../../../utils/format-unknown-error'; | ||||||
| 
 | 
 | ||||||
| const DemoAuth = ({ authDetails }) => { | const DemoAuth = ({ authDetails, redirect }) => { | ||||||
|     const [email, setEmail] = useState(''); |     const [email, setEmail] = useState(''); | ||||||
|     const history = useHistory(); |     const history = useHistory(); | ||||||
|     const { refetchUser } = useAuthUser(); |     const { refetchUser } = useAuthUser(); | ||||||
| @ -23,7 +23,7 @@ const DemoAuth = ({ authDetails }) => { | |||||||
|         try { |         try { | ||||||
|             await emailAuth(authDetails.path, email); |             await emailAuth(authDetails.path, email); | ||||||
|             refetchUser(); |             refetchUser(); | ||||||
|             history.push(`/`); |             history.push(redirect); | ||||||
|         } catch (error) { |         } catch (error) { | ||||||
|             setToastApiError(formatUnknownError(error)); |             setToastApiError(formatUnknownError(error)); | ||||||
|         } |         } | ||||||
| @ -91,6 +91,7 @@ const DemoAuth = ({ authDetails }) => { | |||||||
| 
 | 
 | ||||||
| DemoAuth.propTypes = { | DemoAuth.propTypes = { | ||||||
|     authDetails: PropTypes.object.isRequired, |     authDetails: PropTypes.object.isRequired, | ||||||
|  |     redirect: PropTypes.string.isRequired, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export default DemoAuth; | export default DemoAuth; | ||||||
|  | |||||||
| @ -18,7 +18,7 @@ import { | |||||||
|     LOGIN_PASSWORD_ID, |     LOGIN_PASSWORD_ID, | ||||||
| } from '../../../testIds'; | } from '../../../testIds'; | ||||||
| 
 | 
 | ||||||
| const HostedAuth = ({ authDetails }) => { | const HostedAuth = ({ authDetails, redirect }) => { | ||||||
|     const commonStyles = useCommonStyles(); |     const commonStyles = useCommonStyles(); | ||||||
|     const styles = useStyles(); |     const styles = useStyles(); | ||||||
|     const { refetchUser } = useAuthUser(); |     const { refetchUser } = useAuthUser(); | ||||||
| @ -55,7 +55,7 @@ const HostedAuth = ({ authDetails }) => { | |||||||
|         try { |         try { | ||||||
|             await passwordAuth(authDetails.path, username, password); |             await passwordAuth(authDetails.path, username, password); | ||||||
|             refetchUser(); |             refetchUser(); | ||||||
|             history.push(`/`); |             history.push(redirect); | ||||||
|         } catch (error) { |         } catch (error) { | ||||||
|             if (error.statusCode === 404 || error.statusCode === 400) { |             if (error.statusCode === 404 || error.statusCode === 400) { | ||||||
|                 setErrors(prev => ({ |                 setErrors(prev => ({ | ||||||
| @ -145,6 +145,7 @@ const HostedAuth = ({ authDetails }) => { | |||||||
| 
 | 
 | ||||||
| HostedAuth.propTypes = { | HostedAuth.propTypes = { | ||||||
|     authDetails: PropTypes.object.isRequired, |     authDetails: PropTypes.object.isRequired, | ||||||
|  |     redirect: PropTypes.string.isRequired, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export default HostedAuth; | export default HostedAuth; | ||||||
|  | |||||||
| @ -15,9 +15,10 @@ const Login = () => { | |||||||
|     const { user } = useAuthUser(); |     const { user } = useAuthUser(); | ||||||
|     const query = useQueryParams(); |     const query = useQueryParams(); | ||||||
|     const resetPassword = query.get('reset') === 'true'; |     const resetPassword = query.get('reset') === 'true'; | ||||||
|  |     const redirect = query.get('redirect') || '/'; | ||||||
| 
 | 
 | ||||||
|     if (user) { |     if (user) { | ||||||
|         return <Redirect to="/features" />; |         return <Redirect to={redirect} />; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return ( |     return ( | ||||||
| @ -36,7 +37,7 @@ const Login = () => { | |||||||
|                     condition={resetPassword} |                     condition={resetPassword} | ||||||
|                     show={<ResetPasswordSuccess />} |                     show={<ResetPasswordSuccess />} | ||||||
|                 /> |                 /> | ||||||
|                 <Authentication /> |                 <Authentication redirect={redirect} /> | ||||||
|             </div> |             </div> | ||||||
|         </StandaloneLayout> |         </StandaloneLayout> | ||||||
|     ); |     ); | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ import PasswordField from '../../common/PasswordField/PasswordField'; | |||||||
| import { useAuthApi } from '../../../hooks/api/actions/useAuthApi/useAuthApi'; | import { useAuthApi } from '../../../hooks/api/actions/useAuthApi/useAuthApi'; | ||||||
| import { useAuthUser } from '../../../hooks/api/getters/useAuth/useAuthUser'; | import { useAuthUser } from '../../../hooks/api/getters/useAuth/useAuthUser'; | ||||||
| 
 | 
 | ||||||
| const PasswordAuth = ({ authDetails }) => { | const PasswordAuth = ({ authDetails, redirect }) => { | ||||||
|     const commonStyles = useCommonStyles(); |     const commonStyles = useCommonStyles(); | ||||||
|     const styles = useStyles(); |     const styles = useStyles(); | ||||||
|     const history = useHistory(); |     const history = useHistory(); | ||||||
| @ -56,7 +56,7 @@ const PasswordAuth = ({ authDetails }) => { | |||||||
|         try { |         try { | ||||||
|             await passwordAuth(authDetails.path, username, password); |             await passwordAuth(authDetails.path, username, password); | ||||||
|             refetchUser(); |             refetchUser(); | ||||||
|             history.push(`/`); |             history.push(redirect); | ||||||
|         } catch (error) { |         } catch (error) { | ||||||
|             if (error.statusCode === 404 || error.statusCode === 400) { |             if (error.statusCode === 404 || error.statusCode === 400) { | ||||||
|                 setErrors(prev => ({ |                 setErrors(prev => ({ | ||||||
| @ -168,6 +168,7 @@ const PasswordAuth = ({ authDetails }) => { | |||||||
| 
 | 
 | ||||||
| PasswordAuth.propTypes = { | PasswordAuth.propTypes = { | ||||||
|     authDetails: PropTypes.object.isRequired, |     authDetails: PropTypes.object.isRequired, | ||||||
|  |     redirect: PropTypes.string.isRequired, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export default PasswordAuth; | export default PasswordAuth; | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ import { LOGIN_BUTTON, LOGIN_EMAIL_ID } from '../../../testIds'; | |||||||
| import useToast from '../../../hooks/useToast'; | import useToast from '../../../hooks/useToast'; | ||||||
| import { formatUnknownError } from '../../../utils/format-unknown-error'; | import { formatUnknownError } from '../../../utils/format-unknown-error'; | ||||||
| 
 | 
 | ||||||
| const SimpleAuth = ({ authDetails }) => { | const SimpleAuth = ({ authDetails, redirect }) => { | ||||||
|     const [email, setEmail] = useState(''); |     const [email, setEmail] = useState(''); | ||||||
|     const { refetchUser } = useAuthUser(); |     const { refetchUser } = useAuthUser(); | ||||||
|     const { emailAuth } = useAuthApi(); |     const { emailAuth } = useAuthApi(); | ||||||
| @ -22,7 +22,7 @@ const SimpleAuth = ({ authDetails }) => { | |||||||
|         try { |         try { | ||||||
|             await emailAuth(authDetails.path, email); |             await emailAuth(authDetails.path, email); | ||||||
|             refetchUser(); |             refetchUser(); | ||||||
|             history.push(`/`); |             history.push(redirect); | ||||||
|         } catch (error) { |         } catch (error) { | ||||||
|             setToastApiError(formatUnknownError(error)); |             setToastApiError(formatUnknownError(error)); | ||||||
|         } |         } | ||||||
| @ -80,6 +80,7 @@ const SimpleAuth = ({ authDetails }) => { | |||||||
| 
 | 
 | ||||||
| SimpleAuth.propTypes = { | SimpleAuth.propTypes = { | ||||||
|     authDetails: PropTypes.object.isRequired, |     authDetails: PropTypes.object.isRequired, | ||||||
|  |     redirect: PropTypes.string.isRequired, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export default SimpleAuth; | export default SimpleAuth; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user