feat: Enhance LoginComponent and SocketManager for improved session management and reauthentication
This commit is contained in:
@@ -28,6 +28,27 @@ import GoogleIcon from '@mui/icons-material/Google';
|
||||
// Lazy load GoogleAuthProvider
|
||||
const GoogleAuthProvider = lazy(() => import('../providers/GoogleAuthProvider.js'));
|
||||
|
||||
const getTokenFromAuthResponse = (response) =>
|
||||
response?.token ||
|
||||
response?.accessToken ||
|
||||
response?.jwt ||
|
||||
response?.user?.token ||
|
||||
response?.user?.accessToken ||
|
||||
null;
|
||||
|
||||
const persistSessionAuth = (response) => {
|
||||
if (response?.user) {
|
||||
sessionStorage.setItem('user', JSON.stringify(response.user));
|
||||
}
|
||||
|
||||
const token = getTokenFromAuthResponse(response);
|
||||
if (token) {
|
||||
sessionStorage.setItem('authToken', token);
|
||||
} else {
|
||||
sessionStorage.removeItem('authToken');
|
||||
}
|
||||
};
|
||||
|
||||
// Function to check if user is logged in
|
||||
export const isUserLoggedIn = () => {
|
||||
const storedUser = sessionStorage.getItem('user');
|
||||
@@ -77,6 +98,7 @@ function cartsAreIdentical(cartA, cartB) {
|
||||
export class LoginComponent extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
const { isLoggedIn, user, isAdmin } = isUserLoggedIn();
|
||||
this.state = {
|
||||
open: false,
|
||||
tabValue: 0,
|
||||
@@ -86,9 +108,9 @@ export class LoginComponent extends Component {
|
||||
error: '',
|
||||
loading: false,
|
||||
success: '',
|
||||
isLoggedIn: false,
|
||||
isAdmin: false,
|
||||
user: null,
|
||||
isLoggedIn,
|
||||
isAdmin,
|
||||
user,
|
||||
anchorEl: null,
|
||||
showGoogleAuth: false,
|
||||
cartSyncOpen: false,
|
||||
@@ -102,16 +124,6 @@ export class LoginComponent extends Component {
|
||||
componentDidMount() {
|
||||
// Make the open function available globally
|
||||
window.openLoginDrawer = this.handleOpen;
|
||||
|
||||
// Check if user is logged in
|
||||
const { isLoggedIn: userIsLoggedIn, user: storedUser } = isUserLoggedIn();
|
||||
if (userIsLoggedIn) {
|
||||
this.setState({
|
||||
user: storedUser,
|
||||
isAdmin: !!storedUser.admin,
|
||||
isLoggedIn: true
|
||||
});
|
||||
}
|
||||
|
||||
if (this.props.open) {
|
||||
this.setState({ open: true });
|
||||
@@ -190,7 +202,7 @@ export class LoginComponent extends Component {
|
||||
window.socketManager.emit('verifyUser', { email, password }, (response) => {
|
||||
console.log('LoginComponent: verifyUser', response);
|
||||
if (response.success) {
|
||||
sessionStorage.setItem('user', JSON.stringify(response.user));
|
||||
persistSessionAuth(response);
|
||||
this.setState({
|
||||
user: response.user,
|
||||
isLoggedIn: true,
|
||||
@@ -306,6 +318,7 @@ export class LoginComponent extends Component {
|
||||
window.socketManager.emit('logout', (response) => {
|
||||
if(response.success){
|
||||
sessionStorage.removeItem('user');
|
||||
sessionStorage.removeItem('authToken');
|
||||
window.dispatchEvent(new CustomEvent('userLoggedIn'));
|
||||
this.props.navigate('/');
|
||||
this.setState({
|
||||
@@ -362,7 +375,7 @@ export class LoginComponent extends Component {
|
||||
window.socketManager.emit('verifyGoogleUser', { credential: credentialResponse.credential }, (response) => {
|
||||
console.log('google respo',response);
|
||||
if (response.success) {
|
||||
sessionStorage.setItem('user', JSON.stringify(response.user));
|
||||
persistSessionAuth(response);
|
||||
this.setState({
|
||||
isLoggedIn: true,
|
||||
isAdmin: !!response.user.admin,
|
||||
|
||||
Reference in New Issue
Block a user