9 νλ«νΌ (plus365, safenet, sjclinic, emr, vn, upfinance, mlm, gws, politics)μ star365 ν΅ν© νμμΌλ‘ μ°κ²°νλ λ°©λ².
β οΈ 2026-07-28 λ³κ²½: λΈλΌμ°μ μμμ
star365.signup()μ λ μ΄μ λμνμ§ μμ΅λλ€(401). λΈλΌμ°μ λ ν€λ₯Ό κ°μ§ μ μμ΄, μ΄ κ²½λ‘λ₯Ό μ΄μ΄λλ©΄ λꡬλ μμ email/platform μΌλ‘ μ€μ νμμ λ§λ€ μ μλ μ€ν νλ‘μκ° λ©λλ€. (ssoLoginμ΄ 2026-07-26 μ κ°μ μ΄μ λ‘ μλ² μ μ©μ΄ λ κ²κ³Ό λμΌ)
κ°μ μ±κ³΅ μ§ν, νλ«νΌ μλ²μμ:
const r = await fetch('https://api.star365.site/members/register', {
method: 'POST',
headers: { 'content-type': 'application/json', 'x-api-key': process.env.KAHAN_MEMBERS_KEY },
body: JSON.stringify({ email, platform: 'plus365', local_user_id: String(userId) }),
signal: AbortSignal.timeout(5000),
});
if (r.ok) {
const { star365_uid } = await r.json();
// β οΈ λ°λμ μ μ₯ν κ² β μ΄ κ°μ΄ μμΌλ©΄ ꡬλ
Β·μνμ΄νλ¨ΌνΈλ₯Ό μ‘°νν ν€κ° μμ΄
// ν΄λΉ νμμ μμν λ¬΄λ£ λ±κΈμ λ¨Έλ
λλ€(2026-07 μ 4κ° νλ«νΌμμ μ€μ λ‘ λ°μ).
await db.users.update({ where: { id: userId }, data: { star365Uid: star365_uid } });
}
νΈμΆμ best-effort λ‘ λλ(κ°μ
νλ¦μ λ§μ§ μμ), μλ΅μ star365_uid λ λ°λμ μ μ₯νμΈμ.
Base: https://api.star365.site
POST /members/register
Content-Type: application/json
{ "email": "user@example.com", "platform": "plus365", "local_user_id": "u-123", "extra": {} }
μλ΅: { "star365_uid": "...", "created": true|false, "tier": "BRONZE" }
λ©±λ±(idempotent): κ°μ email+platform μ¬νΈμΆ μ κΈ°μ‘΄ UID λ°ν.
POST /members/events
{ "star365_uid": "...", "platform": "plus365", "event": "visit|login|purchase|referral", "meta": {} }
POST /auth/sso/issue
{ "email": "...", "platform": "...", "local_user_id": "..." }
μλ΅ μ λΈλΌμ°μ μ star365_sso (httpOnly, 7μΌ) + star365_uid μΏ ν€κ° .star365.site λλ©μΈμΌλ‘ μΈν
λ¨.
GET /auth/me
Cookie: star365_sso=...
μλ΅: { "authenticated": true, "star365_uid": "...", "member": {...} }
star365.signup(...) // β μλ² μ μ© (λΈλΌμ°μ νΈμΆ μ reject)
star365.ssoLogin(...) // β μλ² μ μ© (λΈλΌμ°μ νΈμΆ μ reject)
star365.logEvent({ platform, event, meta }) // uid μλ
star365.me()
star365.logout()
star365.uid() // μΏ ν€μμ μ½κΈ°
star365.isAuthenticated()
star365.byEmail(email)
star365.byUid(uid)
star365.statsCrossPlatform()
star365.statsNorthStar()
| μΏ ν€ | HttpOnly | Secure | SameSite | Domain | Max-Age |
|---|---|---|---|---|---|
star365_sso |
β | β | Lax | .star365.site |
604800 (7μΌ) |
star365_uid |
β | β | Lax | .star365.site |
604800 (7μΌ) |
λͺ¨λ μλΈλλ©μΈ(*.star365.site)μμ μλ μΈμ. κ°μ
λ νλ«νΌ λλ©μΈμ΄ .star365.site λ°μ΄λ©΄ SSO μΏ ν€ κ³΅μ λΆκ° β ν΄λΉ νλ«νΌμ signup ν
λ§ μ¬μ©.
| ν· | λμ | λ€μ΄λ‘λ |
|---|---|---|
| Node.js signup patch | plus365, safenet, sjclinic, emr, vn, upfinance, mlm, gws, politics | hospital-nodejs.patch |
| PHP / WP signup snippet | λ κ±°μ νλ«νΌ | php-wp.php |
| README | μ μ© κ°μ΄λ | README.md |
/members/register νΈμΆμ best-effort β μ€ν¨ν΄λ νλ«νΌ κ°μ
μ체λ μ±κ³΅ν΄μΌ ν¨star365_uid μ μ₯μ νμ β λ²λ¦¬λ©΄ μ λ£νκ° κ΅¬μ‘°μ μΌλ‘ λΆκ°λ₯ν΄μ§.catch(()=>{}) λ‘ μμ 무μ κΆμ₯