Posthog behoben

This commit is contained in:
Timo Knuth
2025-12-11 11:40:38 +01:00
parent 8c5e2fa58e
commit 18f92c4285
8 changed files with 141 additions and 34 deletions

View File

@@ -132,6 +132,48 @@ export default function DashboardPage() {
},
];
// Track Google OAuth login/signup
useEffect(() => {
const authMethod = searchParams.get('authMethod');
const isNewUser = searchParams.get('isNewUser') === 'true';
if (authMethod === 'google') {
const trackGoogleAuth = async () => {
try {
// Fetch user data from API (cookie-based auth)
const response = await fetch('/api/user');
if (!response.ok) return;
const user = await response.json();
// Store in localStorage for consistency
localStorage.setItem('user', JSON.stringify(user));
const { identifyUser, trackEvent } = await import('@/components/PostHogProvider');
identifyUser(user.id, {
email: user.email,
name: user.name,
plan: user.plan || 'FREE',
provider: 'google',
});
trackEvent(isNewUser ? 'user_signup' : 'user_login', {
method: 'google',
email: user.email,
isNewUser,
});
// Clean up URL params
router.replace('/dashboard');
} catch (error) {
console.error('PostHog tracking error:', error);
}
};
trackGoogleAuth();
}
}, [searchParams, router]);
// Check for successful payment and verify session
useEffect(() => {
const success = searchParams.get('success');

View File

@@ -17,7 +17,16 @@ export default function AppLayout({
const { t } = useTranslation();
const [sidebarOpen, setSidebarOpen] = useState(false);
const handleSignOut = () => {
const handleSignOut = async () => {
// Track logout event before clearing data
try {
const { trackEvent, resetUser } = await import('@/components/PostHogProvider');
trackEvent('user_logout');
resetUser(); // Reset PostHog user session
} catch (error) {
console.error('PostHog tracking error:', error);
}
// Clear all cookies
document.cookie.split(";").forEach(c => {
document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/");

View File

@@ -36,6 +36,22 @@ export default function LoginPage() {
// Store user in localStorage for client-side
localStorage.setItem('user', JSON.stringify(data.user));
// Track successful login with PostHog
try {
const { identifyUser, trackEvent } = await import('@/components/PostHogProvider');
identifyUser(data.user.id, {
email: data.user.email,
name: data.user.name,
plan: data.user.plan || 'FREE',
});
trackEvent('user_login', {
method: 'email',
email: data.user.email,
});
} catch (error) {
console.error('PostHog tracking error:', error);
}
// Check for redirect parameter
const redirectUrl = searchParams.get('redirect') || '/dashboard';
router.push(redirectUrl);

View File

@@ -49,6 +49,23 @@ export default function SignupPage() {
// Store user in localStorage for client-side
localStorage.setItem('user', JSON.stringify(data.user));
// Track successful signup with PostHog
try {
const { identifyUser, trackEvent } = await import('@/components/PostHogProvider');
identifyUser(data.user.id, {
email: data.user.email,
name: data.user.name,
plan: data.user.plan || 'FREE',
signupMethod: 'email',
});
trackEvent('user_signup', {
method: 'email',
email: data.user.email,
});
} catch (error) {
console.error('PostHog tracking error:', error);
}
// Redirect to dashboard
router.push('/dashboard');
router.refresh();

View File

@@ -79,6 +79,8 @@ export async function GET(request: NextRequest) {
where: { email: userInfo.email },
});
const isNewUser = !user;
// Create user if they don't exist
if (!user) {
user = await db.user.create({
@@ -148,8 +150,12 @@ export async function GET(request: NextRequest) {
// Set authentication cookie
cookies().set('userId', user.id, getAuthCookieOptions());
// Redirect to dashboard
return NextResponse.redirect(`${process.env.NEXT_PUBLIC_APP_URL}/dashboard`);
// Redirect to dashboard with tracking params
const redirectUrl = new URL(`${process.env.NEXT_PUBLIC_APP_URL}/dashboard`);
redirectUrl.searchParams.set('authMethod', 'google');
redirectUrl.searchParams.set('isNewUser', isNewUser.toString());
return NextResponse.redirect(redirectUrl.toString());
} catch (error) {
console.error('Google OAuth error:', error);
return NextResponse.redirect(

View File

@@ -83,6 +83,7 @@ export async function POST(request: NextRequest) {
id: user.id,
name: user.name,
email: user.email,
plan: 'FREE',
},
});
} catch (error) {

View File

@@ -76,7 +76,7 @@ export async function POST(request: NextRequest) {
return NextResponse.json({
success: true,
user: { id: user.id, email: user.email, name: user.name }
user: { id: user.id, email: user.email, name: user.name, plan: user.plan || 'FREE' }
});
} catch (error) {
console.error('Login error:', error);