Google 계정 로그인 연동 추가
This commit is contained in:
43
server/api/auth/google/start.get.js
Normal file
43
server/api/auth/google/start.get.js
Normal file
@@ -0,0 +1,43 @@
|
||||
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)
|
||||
})
|
||||
Reference in New Issue
Block a user