인프런 커뮤니티 질문&답변
server 쪽에서 should be a number of seconds or string representing a timespan 에러가 발생합니다
해결된 질문
작성
·
110
0
Window, node 22 버전 사용중입니다. 4-5 로그인 연동하기에서 회원가입까진 연동이 되는데 로그인 api 요청시 500에러가 발생합니다.
[Nest] 22548 - 2025. 02. 15. 오후 10:00:50 ERROR [ExceptionsHandler] "expiresIn" should be a number of seconds or string representing a timespan
Error: "expiresIn" should be a number of seconds or string representing a timespan
at D:\project\community\server\node_modules\jsonwebtoken\sign.js:56:15
at Array.forEach (<anonymous>)
at validate (D:\project\community\server\node_modules\jsonwebtoken\sign.js:47:6)
at validateOptions (D:\project\community\server\node_modules\jsonwebtoken\sign.js:62:10)
at module.exports [as sign] (D:\project\community\server\node_modules\jsonwebtoken\sign.js:171:5)
at D:\project\community\server\node_modules\@nestjs\jwt\dist\jwt.service.js:56:17
[Nest] 22548 - 2025. 02. 15. 오후 10:00:50 LOG [HTTP] [POST] /auth/signin (500) (okhttp/4.12.0)
//axios.ts
import axios from "axios";
import {Platform} from "react-native";
const baseUrls = {
ios: 'http://localhost:3030',
android: 'http://10.0.2.2:3030'
}
const axiosInstance = axios.create({
baseURL: baseUrls[Platform.OS] ?? 'http://localhost:3030'
});
export default axiosInstance
//auth.ts
import {getSecureStore} from "@/utils/secureStore";
import axios from "@/api/axios";
import {Profile} from "@/types";
interface RequestUser {
email: string;
password: string
}
async function postSignup(body: RequestUser): Promise<void> {
const {data} = await axios.post('/auth/signup', body);
return data;
}
async function postLogin(body: RequestUser): Promise<{ accessToken: string }> {
const {data} = await axios.post('/auth/signin', body);
return data;
}
//useAuth.ts
function useLogin() {
return useMutation({
mutationFn: postLogin,
onSuccess: async ({accessToken}) => {
setHeader('Authorization', accessToken)
await saveSecureStore('accessToken', accessToken);
queryClient.fetchQuery({queryKey: ['auth', 'getMe']});
router.replace('/')
},
onError: () => {
},
})
}postLogin 에서 엔드포인트만 /auth/signup로 바꾸면 회원가입은 정상적으로 요청이 됩니다.
답변 2
0
env를 생성할때 README 를 그대로 복사하셨다면,
env 파일에서 맨아랫줄 키를 JWT_ACCESS_TOKEN_EXPIRATION 으로 변경하고 해보시겠어요?? 오타(ACCERSS)가있었네요! 수업 파일 README도 변경해놓았습니다.
0
안녕하세요, 인프런 AI 인턴입니다. ljy014님이 겪고 계신 문제를 해결하기 위한 조언을 드리겠습니다.
현재 발생하고 있는 "expiresIn" should be a number of seconds or string representing a timespan 오류는 jsonwebtoken 라이브러리를 사용하여 JWT 토큰을 생성할 때 expiresIn 옵션 값이 잘못되었기 때문에 발생하는 문제입니다. 보통 이 옵션은 토큰의 만료 시간을 설정하며, 숫자(초 단위)나 문자열 형식(“1h”, “7d” 등)으로 설정해야 합니다. 이 문제를 해결하기 위해 sign 함수가 호출되는 부분을 점검해 주세요.
문제 해결 방법:
- 서버 부분 확인:
jsonwebtoken.sign함수가 호출되는 코드에서expiresIn옵션이 올바르게 설정되어 있는지 확인해 보세요. 예를 들어, 아래와 같이 설정할 수 있습니다:
const token = jwt.sign({ userId }, secret, {
expiresIn: '1h', // 1 hour
});
설정값 검사:
.env 파일이나 설정 파일에서expiresIn값을 잘못 설정했을 가능성도 있습니다. 해당 파일들을 확인하고 만약 설정이 없는 경우 이 값을 명시적으로 지정해 주세요.NestJS 설정:
NestJS JWT 모듈의 설정 부분에서expiresIn값이 올바르게 설정되어 있는지 확인하세요.타 서비스 참조:
혹시 다른 서비스나 모듈에서token관련 설정 값을 가져오고 있다면, 그 값들이 적절한지도 체크해보시기 바랍니다.
유사한 문제를 겪었던 사용자들의 질문과 답변에서 더 많은 실마리를 얻으실 수 있습니다. 아래는 관련 링크입니다.
- JWT 오류 해결 - jsonwebtoken 사용 시 주의할 점
문제가 지속되거나 추가적인 오류가 발생한다면 더 자세한 정보를 제공해 주시면 더 나은 조언을 드릴 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






말씀해주신대로하니 해결됐습니다! 감사합니다!