feat: Enhance LoginComponent and SocketManager for improved session management and reauthentication

This commit is contained in:
sebseb7
2026-03-19 05:44:03 +01:00
parent f0e4a94dfc
commit a93aa22a76
2 changed files with 129 additions and 18 deletions

View File

@@ -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,