OAuth 로그인
GitHub/Google OAuth 시작과 callback 처리를 ohmesh가 맡습니다.
Static apps. Real sessions.
정적 앱에 로그인과 사용자별 JSON 저장소를 붙이는 작은 백엔드입니다. 앱은 화면에 집중하고, OAuth 세션과 데이터 스코핑은 ohmesh가 맡습니다.
Why ohmesh
GitHub Pages나 커스텀 도메인에 올린 앱도 사용자 데이터가 필요해지는 순간이 옵니다. 그때마다 OAuth callback, 쿠키, CORS, 사용자별 데이터 격리를 새로 만들 필요는 없습니다.
How it works
사용자는 정적 앱에서 시작해 ohmesh 로그인 페이지를 거친 뒤 다시 앱으로 돌아옵니다. 그 다음부터 앱은 쿠키가 포함된 요청으로 인증된 ohmesh API를 호출합니다.
사용자 앱은 ohmesh의 OAuth 시작 URL로 이동합니다. 앱 slug와 돌아올 redirect URL을 함께 보냅니다.
/login?app=notes&redirect_url={앱_복귀_URL}
ohmesh는 앱 전용 로그인 페이지와 GitHub/Google 로그인을 처리하고, 성공하면 앱별 세션 쿠키를 발급합니다.
Set-Cookie: ohmesh_session_app_...
Location: {앱_복귀_URL}
앱은 쿠키가 포함되도록 요청하고, ohmesh는 세션에 맞는 사용자 데이터만 응답합니다.
fetch("/auth/me?app=notes", {
credentials: "include"
})
Core features
GitHub/Google OAuth 시작과 callback 처리를 ohmesh가 맡습니다.
앱 전용 HttpOnly 쿠키로 정적 앱의 로그인 상태를 유지합니다.
등록된 앱 도메인과 redirect URL만 허용해 복귀 흐름을 제한합니다.
사용자와 앱 범위로 격리된 JSON 레코드를 SQLite에 저장합니다.
Use cases
노트, 투두, 북마크, 내부 대시보드처럼 사용자별 상태가 필요한 정적 앱에 잘 맞습니다. 각 앱은 slug와 도메인을 등록하고 필요한 JSON 레코드만 읽고 씁니다.
Quick start
await fetch("https://ohmesh.jjgo.io/auth/me?app=notes", {
credentials: "include"
})
await fetch("https://ohmesh.jjgo.io/api/apps/notes/records", {
method: "POST",
credentials: "include",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
type: "note",
data: { title: "Hello", done: false }
})
})
앱을 등록하고 redirect URL을 연결하면, 로그인과 사용자별 저장소를 바로 사용할 수 있습니다.