44 lines
1.2 KiB
JavaScript
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)
|
|
})
|