punimtag/viewer-frontend/SETUP_AUTH.md
Tanya de2144be2a feat: Add new scripts and update project structure for database management and user authentication
This commit introduces several new scripts for managing database operations, including user creation, permission grants, and data migrations. It also adds new documentation files to guide users through the setup and configuration processes. Additionally, the project structure is updated to enhance organization and maintainability, ensuring a smoother development experience for contributors. These changes support the ongoing transition to a web-based architecture and improve overall project functionality.
2026-01-06 13:53:24 -05:00

3.4 KiB

Authentication Setup Guide

This guide will help you set up the authentication and pending identifications functionality.

Prerequisites

  1. Code changes are complete
  2. .env file is configured with NEXTAUTH_SECRET and database URLs
  3. ⚠️ Database tables need to be created
  4. ⚠️ Database permissions need to be granted

Step-by-Step Setup

1. Create Database Tables

Run the SQL script to create the new tables:

psql -U postgres -d punimtag -f create_auth_tables.sql

Or manually run the SQL commands in create_auth_tables.sql.

2. Grant Database Permissions

You need to grant write permissions for the new tables. Choose one option:

Option A: If using separate write user (viewer_write)

-- Connect as postgres superuser
psql -U postgres -d punimtag

-- Grant permissions
GRANT SELECT, INSERT, UPDATE ON TABLE users TO viewer_write;
GRANT SELECT, INSERT, UPDATE ON TABLE pending_identifications TO viewer_write;
GRANT USAGE, SELECT ON SEQUENCE users_id_seq TO viewer_write;
GRANT USAGE, SELECT ON SEQUENCE pending_identifications_id_seq TO viewer_write;

Option B: If using same user with write permissions (viewer_readonly)

-- Connect as postgres superuser
psql -U postgres -d punimtag

-- Grant permissions
GRANT SELECT, INSERT, UPDATE ON TABLE users TO viewer_readonly;
GRANT SELECT, INSERT, UPDATE ON TABLE pending_identifications TO viewer_readonly;
GRANT USAGE, SELECT ON SEQUENCE users_id_seq TO viewer_readonly;
GRANT USAGE, SELECT ON SEQUENCE pending_identifications_id_seq TO viewer_readonly;

3. Generate Prisma Client

After creating the tables, regenerate the Prisma client:

npx prisma generate

4. Verify Setup

  1. Check tables exist:

    \dt users
    \dt pending_identifications
    
  2. Test user registration:

    • Start the dev server: npm run dev
    • Navigate to http://localhost:3001/register
    • Try creating a new user account
    • Check if the user appears in the database:
      SELECT * FROM users;
      
  3. Test face identification:

    • Log in with your new account
    • Open a photo with faces
    • Click on a face to identify it
    • Check if pending identification is created:
      SELECT * FROM pending_identifications;
      

Troubleshooting

Error: "permission denied for table users"

Solution: Grant write permissions to your database user (see Step 2 above).

Error: "relation 'users' does not exist"

Solution: Run the create_auth_tables.sql script (see Step 1 above).

Error: "PrismaClientValidationError"

Solution: Regenerate Prisma client: npx prisma generate

Registration page shows error

Check:

  1. .env file has DATABASE_URL_WRITE configured
  2. Database user has INSERT permission on users table
  3. Prisma client is up to date: npx prisma generate

What Works Now

User registration (/register) User login (/login) Face identification (requires login) Pending identifications saved to database Authentication checks in place

What's Not Implemented Yet

Admin approval interface (to approve/reject pending identifications) Applying approved identifications to the main people and faces tables

Next Steps

Once everything is working:

  1. Test user registration
  2. Test face identification
  3. Verify pending identifications are saved correctly
  4. (Future) Implement admin approval interface