Add src/utils/auth.ts
This commit is contained in:
89
src/utils/auth.ts
Normal file
89
src/utils/auth.ts
Normal file
@@ -0,0 +1,89 @@
|
||||
// Authentication utility functions
|
||||
|
||||
export interface AuthSession {
|
||||
token: string;
|
||||
email: string;
|
||||
userId?: string;
|
||||
expiresAt?: number;
|
||||
}
|
||||
|
||||
export const authUtils = {
|
||||
// Store session in sessionStorage
|
||||
setSession: (session: AuthSession) => {
|
||||
sessionStorage.setItem('authToken', session.token);
|
||||
sessionStorage.setItem('userEmail', session.email);
|
||||
if (session.userId) {
|
||||
sessionStorage.setItem('userId', session.userId);
|
||||
}
|
||||
if (session.expiresAt) {
|
||||
sessionStorage.setItem('expiresAt', session.expiresAt.toString());
|
||||
}
|
||||
},
|
||||
|
||||
// Get current session from sessionStorage
|
||||
getSession: (): AuthSession | null => {
|
||||
const token = sessionStorage.getItem('authToken');
|
||||
const email = sessionStorage.getItem('userEmail');
|
||||
|
||||
if (!token || !email) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
token,
|
||||
email,
|
||||
userId: sessionStorage.getItem('userId') || undefined,
|
||||
expiresAt: sessionStorage.getItem('expiresAt')
|
||||
? parseInt(sessionStorage.getItem('expiresAt')!)
|
||||
: undefined,
|
||||
};
|
||||
},
|
||||
|
||||
// Check if user is authenticated
|
||||
isAuthenticated: (): boolean => {
|
||||
const session = authUtils.getSession();
|
||||
if (!session) return false;
|
||||
|
||||
// Check if session has expired
|
||||
if (session.expiresAt && new Date().getTime() > session.expiresAt) {
|
||||
authUtils.clearSession();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
// Clear session on logout
|
||||
clearSession: () => {
|
||||
sessionStorage.removeItem('authToken');
|
||||
sessionStorage.removeItem('userEmail');
|
||||
sessionStorage.removeItem('userId');
|
||||
sessionStorage.removeItem('expiresAt');
|
||||
},
|
||||
|
||||
// Persist remember-me preference
|
||||
setRememberMe: (email: string) => {
|
||||
localStorage.setItem('rememberEmail', email);
|
||||
},
|
||||
|
||||
// Get remembered email
|
||||
getRememberedEmail: (): string | null => {
|
||||
return localStorage.getItem('rememberEmail');
|
||||
},
|
||||
|
||||
// Clear remember-me preference
|
||||
clearRememberMe: () => {
|
||||
localStorage.removeItem('rememberEmail');
|
||||
},
|
||||
|
||||
// Validate email format
|
||||
isValidEmail: (email: string): boolean => {
|
||||
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||
return emailRegex.test(email);
|
||||
},
|
||||
|
||||
// Validate password strength
|
||||
isValidPassword: (password: string): boolean => {
|
||||
return password.length >= 6;
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user