summaryrefslogtreecommitdiff
path: root/lib/users/session/helper.ts
blob: 439ab32d5c494fb625582fc32640a89256459636 (plain)
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)
    }
  }