feat: implement full authentication system with middleware protection

- Install @supabase/ssr package for server-side auth
- Create middleware.ts for route protection (redirects to login if not authenticated)
- Fix login page admin check to verify specific user ID
- Add AUTH_SETUP.md with complete setup instructions
- Add setup-admin.sql for database configuration
- Logout button already exists in sidebar
This commit is contained in:
Millian Lamiaux
2026-03-17 10:59:52 +01:00
parent 4c5bcc41c5
commit e0057e18e0
6 changed files with 368 additions and 3 deletions

44
supabase/setup-admin.sql Normal file
View File

@@ -0,0 +1,44 @@
-- ============================================================
-- Setup: Initial Admin User and Authentication
-- ============================================================
-- Run this SQL after creating your first user in Supabase Auth
-- Step 1: Create helper function to check admin status
CREATE OR REPLACE FUNCTION is_admin(user_id UUID)
RETURNS BOOLEAN AS $$
BEGIN
RETURN EXISTS (
SELECT 1 FROM public.admin_users
WHERE id = user_id
);
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
-- Step 2: Add initial admin user
-- Method A: If user already exists in auth.users, run this:
/*
INSERT INTO public.admin_users (id, email, role)
SELECT id, email, 'admin'
FROM auth.users
WHERE email = 'admin@tabatafit.com'
ON CONFLICT (id) DO NOTHING;
*/
-- Method B: Insert directly with known UUID
-- INSERT INTO public.admin_users (id, email, role)
-- VALUES ('paste-uuid-here', 'admin@tabatafit.com', 'admin');
-- Step 3: Verify admin setup
SELECT
au.id,
au.email,
au.role,
au.created_at,
u.email as auth_email
FROM public.admin_users au
JOIN auth.users u ON au.id = u.id;
-- Step 4: List all users in auth (to find your UUID)
SELECT id, email, created_at, last_sign_in_at
FROM auth.users
ORDER BY created_at DESC;