Files
sori.studio/server/api/auth/google/start.get.js

44 lines
1.2 KiB
JavaScript

import { createError, getQuery, sendRedirect } from 'h3'
import {
createGoogleAuthorizationUrl,
createGoogleOAuthState,
normalizeGoogleOAuthRedirect
} from '../../../utils/google-oauth'
import { requireMemberSession } from '../../../utils/member-auth'
/**
* Google OAuth 시작 API
* @param {import('h3').H3Event} event - 요청 이벤트
* @returns {Promise<void>} Google 인증 화면 리다이렉트
*/
export default defineEventHandler(async (event) => {
const query = getQuery(event)
const mode = String(query.mode || 'member')
if (!['member', 'admin', 'link'].includes(mode)) {
throw createError({
statusCode: 400,
message: 'Google 로그인 모드가 올바르지 않습니다.'
})
}
const redirectTo = normalizeGoogleOAuthRedirect(
query.redirect,
mode === 'admin' ? '/admin' : mode === 'link' ? '/settings' : '/'
)
let userId = ''
if (mode === 'link') {
const session = await requireMemberSession(event)
userId = session.userId
}
const state = createGoogleOAuthState(event, {
mode,
redirectTo,
userId
})
return sendRedirect(event, createGoogleAuthorizationUrl(event, state), 302)
})