"use server"; import jwt from 'jsonwebtoken'; import { findOtpByEmailandToken } from '@/lib/users/service'; export async function verifyTokenAction(token: string) { if (!token) { // 토큰이 없으면 바로 false 반환 return { valid: false }; } try { // 토큰 검증 const decoded = jwt.verify(token, process.env.JWT_SECRET!) as { email: string; otp: string }; const { email } = decoded; // DB에서 OTP 정보 조회 const otp = await findOtpByEmailandToken(email, token); if (!otp) { // 해당하는 OTP/토큰이 없으면 invalid return { valid: false }; } // 토큰 동일성 및 만료 확인 if (otp.otpToken !== token || (otp.otpExpires && otp.otpExpires < new Date())) { return { valid: false }; } // 여기까지 통과하면 valid return { valid: true, email, }; } catch (error) { // JWT 검증 실패 return { valid: false }; } }