Auth rework

This commit is contained in:
seb
2026-06-23 11:08:40 +02:00
parent 24f68c94f3
commit 09f53b5ac2
8 changed files with 27 additions and 34 deletions

View File

@@ -1,17 +1,9 @@
import {
createContext,
useCallback,
useContext,
useEffect,
useMemo,
useState,
} from 'react';
import { useCallback, useEffect, useMemo, useState } from 'react';
import { useSnackbar } from 'notistack';
import { auth } from '../api';
import { AuthContext } from './context';
const AuthContext = createContext(null);
export function AuthProvider({ children }) {
export default function AuthProvider({ children }) {
const { enqueueSnackbar } = useSnackbar();
const [user, setUser] = useState(null);
const [googleClientId, setGoogleClientId] = useState(null);
@@ -42,22 +34,17 @@ export function AuthProvider({ children }) {
};
}, [enqueueSnackbar]);
const loginWithGoogle = useCallback(
async (credential) => {
const { user: me } = await auth.loginWithGoogle(credential);
setUser(me);
setStatus('authed');
enqueueSnackbar(`Welcome, ${me.email}`, { variant: 'success' });
},
[enqueueSnackbar],
);
const loginWithGoogle = useCallback(async (credential) => {
const { user: me } = await auth.loginWithGoogle(credential);
setUser(me);
setStatus('authed');
}, []);
const logout = useCallback(async () => {
await auth.logout();
setUser(null);
setStatus('anon');
enqueueSnackbar('Signed out', { variant: 'info' });
}, [enqueueSnackbar]);
}, []);
const value = useMemo(
() => ({ user, googleClientId, status, loginWithGoogle, logout }),
@@ -66,9 +53,3 @@ export function AuthProvider({ children }) {
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
}
export function useAuth() {
const ctx = useContext(AuthContext);
if (!ctx) throw new Error('useAuth must be used within an AuthProvider');
return ctx;
}

3
src/auth/context.js Normal file
View File

@@ -0,0 +1,3 @@
import { createContext } from 'react';
export const AuthContext = createContext(null);

8
src/auth/useAuth.js Normal file
View File

@@ -0,0 +1,8 @@
import { useContext } from 'react';
import { AuthContext } from './context';
export function useAuth() {
const ctx = useContext(AuthContext);
if (!ctx) throw new Error('useAuth must be used within an AuthProvider');
return ctx;
}