// 로그인: 학생·교수자 공용. 교수자 아이디면 관리 화면으로. import { api, esc, toast } from "./common.js"; const main = document.getElementById("main"); const params = new URLSearchParams(location.search); const next = params.get("next") || ""; const safe = (u) => (u && u.startsWith("/") && !u.startsWith("//") ? u : ""); main.innerHTML = `

로그인

사례와 문제는 회원만 볼 수 있습니다.

아직 회원이 아니신가요? 가입 코드로 회원 가입

아이디·비밀번호를 잊었다면 담당 교수자에게 문의해 주세요.

`; document.getElementById("f").addEventListener("submit", async (e) => { e.preventDefault(); const v = Object.fromEntries(new FormData(e.target).entries()); const btn = e.target.querySelector("button"); btn.disabled = true; try { const r = await api("/api/login", { method: "POST", body: v }); if (r.kind === "admin") { const n = safe(next); location.href = n.startsWith("/admin") || n.startsWith("/members") ? n : "/admin"; } else { location.href = safe(next) || "/"; } } catch (err) { toast(err.status === 429 ? "시도가 너무 많습니다. 잠시 후 다시 해 주세요." : err.message, true); btn.disabled = false; } }); // 이미 로그인한 상태면 알려 줌 api("/api/members/me").then((me) => { if (me.logged_in || me.admin) { main.insertAdjacentHTML("afterbegin", `

이미 ${esc(me.logged_in ? me.name : me.admin)} 님으로 로그인되어 있습니다. ${me.admin ? "관리 화면" : "내 정보"}

`); } }).catch(() => {});