로그인 설정 UI 제거 및 .env 기반 설정

- 로그인 설정 모달(UI) 제거
- 허용 이메일 라벨을 관리자 이메일로 변경
- Auth0/관리자 이메일을 서버 .env에서 제공하고 클라이언트가 자동 로드

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dsyoon
2026-02-07 21:31:52 +09:00
parent c2ba78db5c
commit fb2153cbb0
5 changed files with 138 additions and 179 deletions

View File

@@ -22,8 +22,6 @@
// 2) Allowed Callback URLs / Allowed Logout URLs에 현재 사이트 주소를 등록하세요.
// 예: https://drive.daewoongai.com/apps/dashboard/
window.AUTH_CONFIG = {
// end-user가 설정 모달을 사용하는지 여부(기본: false)
allowEndUserConfig: false,
// (선택) API 서버가 다른 도메인이면 지정. 예: https://api.ncue.net
apiBase: "",
auth0: {
@@ -34,8 +32,8 @@
connections: {
google: "",
},
// 관리 허용 이메일(대소문자 무시)
allowedEmails: [],
// 관리 이메일(대소문자 무시)
adminEmails: [],
};
</script>
<script defer src="./script.js"></script>
@@ -194,48 +192,6 @@
</div>
</div>
<!-- Auth Config Modal -->
<div class="modal" id="authModal" role="dialog" aria-modal="true" aria-labelledby="authModalTitle" hidden>
<div class="modal-backdrop" data-auth-close="1"></div>
<div class="modal-card" role="document">
<div class="modal-head">
<div class="modal-title" id="authModalTitle">로그인 설정</div>
<button class="icon-btn" type="button" id="btnAuthClose" title="닫기" aria-label="닫기">×</button>
</div>
<form id="authForm" class="modal-body">
<label class="field">
<span class="field-label">Auth0 Domain</span>
<input id="authDomain" class="input" type="text" placeholder="예: your-tenant.us.auth0.com" />
<div class="hint">Auth0 테넌트 도메인입니다. (비밀값 아님)</div>
</label>
<label class="field">
<span class="field-label">Auth0 Client ID</span>
<input id="authClientId" class="input" type="text" placeholder="예: AbCdEf..." />
<div class="hint">Auth0 SPA Application의 Client ID입니다. (비밀값 아님)</div>
</label>
<label class="field">
<span class="field-label">허용 이메일</span>
<input id="authAllowedEmails" class="input" type="text" placeholder="예: me@example.com, admin@example.com" />
<div class="hint">쉼표로 구분합니다. 비워두면 “로그인한 모든 계정”이 관리 가능해집니다.</div>
</label>
<label class="field">
<span class="field-label">Connection 이름(선택)</span>
<input id="authConnGoogle" class="input" type="text" placeholder="Google 예: google-oauth2" />
<div class="hint">Auth0에서 설정한 Google connection 이름입니다. (보통 `google-oauth2`)</div>
</label>
<div class="modal-foot">
<button class="btn btn-ghost" type="button" id="btnAuthReset">초기화</button>
<button class="btn btn-primary" type="submit" id="btnAuthSave">저장</button>
</div>
</form>
</div>
</div>
<!-- Hidden file input for import -->
<input id="file" type="file" accept="application/json" hidden />
@@ -713,7 +669,12 @@
if (!data || typeof data !== "object") return null;
const auth0 = data.auth0 && typeof data.auth0 === "object" ? data.auth0 : {};
const connections = data.connections && typeof data.connections === "object" ? data.connections : {};
const allowedEmails = Array.isArray(data.allowedEmails) ? data.allowedEmails : [];
// legacy: allowedEmails -> adminEmails
const adminEmails = Array.isArray(data.adminEmails)
? data.adminEmails
: Array.isArray(data.allowedEmails)
? data.allowedEmails
: [];
return {
auth0: {
domain: String(auth0.domain || "").trim(),
@@ -724,7 +685,7 @@
kakao: String(connections.kakao || "").trim(),
naver: String(connections.naver || "").trim(),
},
allowedEmails: allowedEmails.map((e) => String(e).trim().toLowerCase()).filter(Boolean),
adminEmails: adminEmails.map((e) => String(e).trim().toLowerCase()).filter(Boolean),
};
}
@@ -732,7 +693,12 @@
const cfg = window.AUTH_CONFIG && typeof window.AUTH_CONFIG === "object" ? window.AUTH_CONFIG : {};
const auth0 = cfg.auth0 && typeof cfg.auth0 === "object" ? cfg.auth0 : {};
const connections = cfg.connections && typeof cfg.connections === "object" ? cfg.connections : {};
const allowedEmails = Array.isArray(cfg.allowedEmails) ? cfg.allowedEmails : [];
// legacy: allowedEmails -> adminEmails
const adminEmails = Array.isArray(cfg.adminEmails)
? cfg.adminEmails
: Array.isArray(cfg.allowedEmails)
? cfg.allowedEmails
: [];
const base = {
auth0: {
domain: String(auth0.domain || "").trim(),
@@ -743,7 +709,7 @@
kakao: String(connections.kakao || "").trim(),
naver: String(connections.naver || "").trim(),
},
allowedEmails: allowedEmails.map((e) => String(e).trim().toLowerCase()).filter(Boolean),
adminEmails: adminEmails.map((e) => String(e).trim().toLowerCase()).filter(Boolean),
};
const over = loadAuthOverride();
if (!over) return base;
@@ -757,7 +723,7 @@
kakao: over.connections.kakao || base.connections.kakao,
naver: over.connections.naver || base.connections.naver,
},
allowedEmails: over.allowedEmails.length ? over.allowedEmails : base.allowedEmails,
adminEmails: over.adminEmails.length ? over.adminEmails : base.adminEmails,
};
}