From fac88b6508dbbe1c0112e1bbd7ed4b5615c4683b Mon Sep 17 00:00:00 2001 From: dsyoon Date: Sat, 7 Feb 2026 18:04:18 +0900 Subject: [PATCH] Add social quick login and user sync API Add quick provider login buttons (Auth0 connections), an API to upsert users into Postgres and gate admin via can_manage, plus schema and Node server. Co-authored-by: Cursor --- .gitignore | 5 ++ README.md | 32 +++++++++++++ db/schema.sql | 27 +++++++++++ index.html | 11 +++++ package.json | 18 +++++++ script.js | 99 ++++++++++++++++++++++++++++++++++++++ server.js | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 320 insertions(+) create mode 100644 .gitignore create mode 100644 db/schema.sql create mode 100644 package.json create mode 100644 server.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5fbafd6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +node_modules/ +.env +.env.* + diff --git a/README.md b/README.md index 6167266..c73d7f2 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,36 @@ python3 -m http.server 8000 그 후 브라우저에서 `http://localhost:8000`으로 접속합니다. +## 서버(Node) + PostgreSQL 사용자 저장 + +로그인 후 사용자 정보를 `ncue_user`에 저장하고(Upsert), `can_manage`로 관리 권한을 DB에서 제어하려면 Node 서버로 실행하세요. + +1) 의존성 설치 + +```bash +npm install +``` + +2) 테이블 생성 + +```bash +psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -f db/schema.sql +``` + +3) 서버 실행 + +```bash +npm start +``` + +### 권한 부여 + +최초 로그인 사용자는 DB에 저장되지만 `can_manage=false`입니다. 관리 권한을 주려면: + +```sql +update ncue_user set can_manage = true where email = 'me@example.com'; +``` + ## 로그인(관리 기능 잠금) 이 프로젝트는 **정적 사이트**에서 동작하도록, 관리 기능(추가/편집/삭제/가져오기)을 **로그인 후(허용 이메일)** 에만 활성화할 수 있습니다. @@ -36,6 +66,8 @@ python3 -m http.server 8000 - 서버에 바로 반영하기 전 테스트가 필요하면, 페이지 상단의 **로그인**을 누르면 뜨는 **로그인 설정 모달**에서 `domain/clientId/allowedEmails`를 입력하면 브라우저에 저장되어 즉시 테스트할 수 있습니다. +- Auth0에서 각 소셜 로그인 연결(connection)을 만들었다면, 모달의 connection 이름(예: `google-oauth2`, `kakao`, `naver`)을 입력하면 + 상단에 **구글/카카오/네이버** 간편 로그인 버튼이 표시됩니다. ## 데이터 저장 diff --git a/db/schema.sql b/db/schema.sql new file mode 100644 index 0000000..6bae1c1 --- /dev/null +++ b/db/schema.sql @@ -0,0 +1,27 @@ +-- NCUE user table for admin gating / auditing +-- Run: psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -f db/schema.sql + +DO $$ +BEGIN + IF NOT EXISTS ( + SELECT 1 + FROM information_schema.tables + WHERE table_schema = 'public' + AND table_name = 'ncue_user' + ) THEN + CREATE TABLE public.ncue_user ( + sub text PRIMARY KEY, + email text, + name text, + picture text, + provider text, + last_login_at timestamptz, + can_manage boolean NOT NULL DEFAULT false, + created_at timestamptz NOT NULL DEFAULT now(), + updated_at timestamptz NOT NULL DEFAULT now() + ); + + CREATE INDEX idx_ncue_user_email ON public.ncue_user (email); + END IF; +END $$; + diff --git a/index.html b/index.html index a4ce7a6..a98f8ca 100644 --- a/index.html +++ b/index.html @@ -71,6 +71,9 @@ 로그인 필요 + + + @@ -203,6 +206,14 @@
쉼표로 구분합니다. 비워두면 “로그인한 모든 계정”이 관리 가능해집니다.
+ +