1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
import { authenticateWithSGips, verifyExternalCredentials } from "../auth/verifyCredentails";
import { SessionRepository } from "./repository";
// lib/session/helpers.ts - NextAuth 헬퍼 함수들 개선
export const authHelpers = {
// 1차 인증 검증 및 임시 키 생성 (DB 버전)
async performFirstAuth(username: string, password: string, provider: 'email' | 'sgips') {
console.log('performFirstAuth started:', { username, provider })
try {
let authResult;
if (provider === 'sgips') {
authResult = await authenticateWithSGips(username, password)
} else {
authResult = await verifyExternalCredentials(username, password)
}
if (!authResult.success || !authResult.user) {
return { success: false, error: 'Invalid credentials' }
}
// DB에 임시 인증 세션 생성
const expiresAt = new Date(Date.now() + (10 * 60 * 1000)) // 10분 후 만료
const tempAuthKey = await SessionRepository.createTempAuthSession({
userId: authResult.user.id,
email: authResult.user.email,
authMethod: provider,
expiresAt
})
console.log('Temp auth stored in DB:', {
tempAuthKey,
userId: authResult.user.id,
email: authResult.user.email,
authMethod: provider,
expiresAt
})
return {
success: true,
tempAuthKey,
userId: authResult.user.id,
email: authResult.user.email
}
} catch (error) {
console.error('First auth error:', error)
return { success: false, error: 'Authentication failed' }
}
},
// 임시 인증 정보 조회 (DB 버전)
async getTempAuth(tempAuthKey: string) {
return await SessionRepository.getTempAuthSession(tempAuthKey)
},
// 임시 인증 정보 삭제 (DB 버전)
async clearTempAuth(tempAuthKey: string) {
await SessionRepository.markTempAuthSessionAsUsed(tempAuthKey)
}
}
|