통합 로그인
모든 픽골라 서비스는 accounts.pickgola.com 하나로 로그인합니다.
동작 방식
- 사용자가 서비스(예:
dayvent.pickgola.com)에 들어오면, 서비스는getMe()로 로그인 여부를 확인합니다. - 로그인하지 않았으면
redirectToLogin()으로accounts.pickgola.com/login?return_to=<현재 주소>로 보냅니다. - 로그인에 성공하면 API가
Domain=.pickgola.comhttpOnly 쿠키를 발급하고, accounts 앱이return_to주소로 돌려보냅니다. - 이후 모든
*.pickgola.com서비스가 같은 쿠키로 로그인 상태를 공유합니다.
| 쿠키 | 내용 | 유효기간 | 경로 |
|---|---|---|---|
pg_at | 액세스 토큰 (JWT) | 15분 | / |
pg_rt | 리프레시 토큰 | 30일 | /v1/auth |
두 쿠키 모두 httpOnly라서 자바스크립트에서 읽을 수 없습니다. 로그인 여부는 항상 getMe()로 확인하세요.
예시: 로그인이 필요한 화면
ts
import { createClient, getMe, redirectToLogin, resolveUrls } from '@devercorp/pickgola-sdk';
const urls = resolveUrls();
const client = createClient({ baseUrl: urls.api });
const me = await getMe(client);
if (!me) {
redirectToLogin({ accountsUrl: urls.accounts, service: 'day' });
}서비스별 역할
가입할 때 서비스와 역할을 함께 고릅니다. 한 계정이 여러 서비스·역할을 가질 수 있습니다.
| 서비스 | 역할 |
|---|---|
day (데이벤트) | user 일반 사용자, influencer 인플루언서, venue 장소·브랜드 운영자 |
studio (픽골라 스튜디오) | advertiser 광고주, creator 크리에이터 |
다른 서비스를 처음 쓰는 사용자는 client.users.addProfile({ service, role })로 역할을 추가합니다.
ts
const hasDay = me.profiles.some((profile) => profile.service === 'day');return_to 검증
로그인 뒤 돌아갈 주소는 isAllowedReturnTo()로 검사합니다. 운영에서는 https://*.pickgola.com만 허용하고, 로컬 개발에서만 allowLocalhost: true로 localhost를 허용합니다.
ts
isAllowedReturnTo('https://dayvent.pickgola.com/me'); // true
isAllowedReturnTo('https://evil.com'); // false
isAllowedReturnTo('http://localhost:3003', { allowLocalhost: true }); // true