forked from akai/readest
51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
import { User } from '@supabase/supabase-js';
|
|
import { supabase } from '@/utils/supabase';
|
|
|
|
interface UseAuthCallbackOptions {
|
|
accessToken?: string | null;
|
|
refreshToken?: string | null;
|
|
login: (accessToken: string, user: User) => void;
|
|
navigate: (path: string) => void;
|
|
next?: string;
|
|
}
|
|
|
|
export function handleAuthCallback({
|
|
accessToken,
|
|
refreshToken,
|
|
login,
|
|
navigate,
|
|
next = '/',
|
|
}: UseAuthCallbackOptions) {
|
|
async function finalizeSession() {
|
|
if (!accessToken || !refreshToken) {
|
|
console.error('No access token or refresh token');
|
|
navigate('/auth/error');
|
|
return;
|
|
}
|
|
|
|
const { error } = await supabase.auth.setSession({
|
|
access_token: accessToken,
|
|
refresh_token: refreshToken,
|
|
});
|
|
|
|
if (error) {
|
|
console.error('Error setting session:', error);
|
|
navigate('/auth/error');
|
|
return;
|
|
}
|
|
|
|
const {
|
|
data: { user },
|
|
} = await supabase.auth.getUser();
|
|
if (user) {
|
|
login(accessToken, user);
|
|
navigate(next);
|
|
} else {
|
|
console.error('Error fetching user data');
|
|
navigate('/auth/error');
|
|
}
|
|
}
|
|
|
|
finalizeSession();
|
|
}
|