This commit is contained in:
Timo Knuth
2025-10-18 17:55:32 +02:00
parent 254e6490b8
commit 91b78cb284
65 changed files with 4481 additions and 1078 deletions

View File

@@ -7,11 +7,13 @@ import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/Card';
import { Input } from '@/components/ui/Input';
import { Button } from '@/components/ui/Button';
import { useTranslation } from '@/hooks/useTranslation';
import { useCsrf } from '@/hooks/useCsrf';
export default function LoginPage() {
const router = useRouter();
const searchParams = useSearchParams();
const { t } = useTranslation();
const { fetchWithCsrf, loading: csrfLoading } = useCsrf();
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [loading, setLoading] = useState(false);
@@ -23,9 +25,8 @@ export default function LoginPage() {
setError('');
try {
const response = await fetch('/api/auth/simple-login', {
const response = await fetchWithCsrf('/api/auth/simple-login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email, password }),
});
@@ -50,8 +51,8 @@ export default function LoginPage() {
};
const handleGoogleSignIn = () => {
// Google sign-in disabled for now
alert('Google sign-in coming soon!');
// Redirect to Google OAuth API route
window.location.href = '/api/auth/google';
};
// Demo login
@@ -109,8 +110,8 @@ export default function LoginPage() {
</Link>
</div>
<Button type="submit" className="w-full" loading={loading}>
Sign In
<Button type="submit" className="w-full" loading={loading} disabled={csrfLoading || loading}>
{csrfLoading ? 'Loading...' : 'Sign In'}
</Button>
<div className="relative my-6">

View File

@@ -1,7 +1,6 @@
'use client';
import React, { useState } from 'react';
import { signIn } from 'next-auth/react';
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/Card';
@@ -43,19 +42,16 @@ export default function SignupPage() {
body: JSON.stringify({ name, email, password }),
});
if (response.ok) {
// Auto sign in after signup
const result = await signIn('credentials', {
email,
password,
redirect: false,
});
const data = await response.json();
if (result?.ok) {
router.push('/dashboard');
}
if (response.ok && data.success) {
// Store user in localStorage for client-side
localStorage.setItem('user', JSON.stringify(data.user));
// Redirect to dashboard
router.push('/dashboard');
router.refresh();
} else {
const data = await response.json();
setError(data.error || 'Failed to create account');
}
} catch (err) {
@@ -66,7 +62,8 @@ export default function SignupPage() {
};
const handleGoogleSignIn = () => {
signIn('google', { callbackUrl: '/dashboard' });
// Redirect to Google OAuth API route
window.location.href = '/api/auth/google';
};
return (