Fix #4361: User's authenticated state is not maintained correctly (#4405)

This commit is contained in:
darth-coder00 2022-04-23 21:57:13 +05:30 committed by GitHub
parent 4d2bde4fe7
commit 0a499dc7ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 3 deletions

View File

@ -127,6 +127,7 @@ export const AuthProvider = ({
appState.updateUserDetails({} as User);
appState.updateUserPermissions({} as UserPermissions);
localStorage.removeItem(oidcTokenKey);
setIsUserAuthenticated(false);
setLoadingIndicator(false);
if (forceLogout) {
onLogoutHandler();

View File

@ -54,6 +54,7 @@ describe('Test SigninPage Component', () => {
isAuthDisabled: false,
authConfig: { provider: 'google' },
onLoginHandler: jest.fn(),
onLogoutHandler: jest.fn(),
});
const { container } = render(<SigninPage />, {
wrapper: MemoryRouter,
@ -81,6 +82,7 @@ describe('Test SigninPage Component', () => {
isAuthDisabled: false,
authConfig: { provider },
onLoginHandler: jest.fn(),
onLogoutHandler: jest.fn(),
});
const { container } = render(<SigninPage />, {
wrapper: MemoryRouter,
@ -99,6 +101,7 @@ describe('Test SigninPage Component', () => {
isAuthDisabled: false,
authConfig: { provider: 'custom-oidc', providerName: 'Custom OIDC' },
onLoginHandler: jest.fn(),
onLogoutHandler: jest.fn(),
});
const { container } = render(<SigninPage />, {
wrapper: MemoryRouter,

View File

@ -13,11 +13,12 @@
import { isEmpty } from 'lodash';
import { observer } from 'mobx-react';
import React from 'react';
import React, { useEffect, useMemo } from 'react';
import { useHistory } from 'react-router-dom';
import appState from '../../AppState';
import loginBG from '../../assets/img/login-bg.png';
import { useAuthContext } from '../../authentication/auth-provider/AuthProvider';
import Loader from '../../components/Loader/Loader';
import LoginButton from '../../components/LoginButton/LoginButton';
import { ROUTES } from '../../constants/constants';
import { AuthTypes } from '../../enums/signin.enum';
@ -26,7 +27,11 @@ import LoginCarousel from './LoginCarousel';
const SigninPage = () => {
const history = useHistory();
const { isAuthDisabled, authConfig, onLoginHandler } = useAuthContext();
const { isAuthDisabled, authConfig, onLoginHandler, onLogoutHandler } =
useAuthContext();
const isAlreadyLoggedIn = useMemo(() => {
return isAuthDisabled || !isEmpty(appState.userDetails);
}, [isAuthDisabled, appState.userDetails]);
const handleSignIn = () => {
onLoginHandler && onLoginHandler();
@ -82,10 +87,20 @@ const SigninPage = () => {
);
};
// If user is neither logged in or nor security is disabled
// invoke logout handler to clean-up any slug storage
useEffect(() => {
if (!isAlreadyLoggedIn) {
onLogoutHandler();
}
}, []);
// If the user is already logged in or if security is disabled
// redirect the user to the home page.
if (isAuthDisabled || !isEmpty(appState.userDetails)) {
if (isAlreadyLoggedIn) {
history.push(ROUTES.HOME);
return <Loader />;
}
return (