Nodejs 공부하던 중 로그인 테스트 하던 중 계속 secretOrPrivateKey must have a value
에러가 떴다.
일단 이 에러는 jsonwebtoken 라이브러리를 사용하여 토큰을 생성하거나 검증할 때 발생하는 오류이다. 찾아보니깐 이 에러는 주로 jwt.sign()
또는 jwt.verify()
함수에 비어 있거나 undefined
인 secretOrPrivateKey
값을 전달했을 때 발생한다고 나온다.
require('dotenv').config();
const jwt = require('jsonwebtoken');
const JWT_SECRET_KEY = process.env.JWT_SECRET_KEY;
UserSchema.methods.generateToken = function() {
const token = jwt.sign({ _id: this.id }, JWT_SECRET_TOKEN);
return token;
}
이런 식으로 토큰을 반환해줬지만 막상 로그인에서 에러가 뜨는것이다. 분명 나는 .env 에 JWT_SECRET_KEY 도 정의해줬고 dotenv를 통해 process.env 를 node 상에서 사용할 수 있게 해줬는데 인식을 못하는 것이었다.
해결방법을 계속 찾아보는데 스택플로우에서 백틱을 써보라고 하였다.
그래서 다음과 같이 코드를 고쳤다.
const JWT_SECRET_KEY = `${process.env.JWT_SECRET_KEY}`;
이랬더니 에러가 뜨지 않고 정상작동을 하는것을 확인하였다. 백틱을 쓰는것과 안쓴것의 차이를 모르겠다. gpt에 물어본 결과, 백틱을 감싸면 undefined 일지라도 템플릿 리터럴로 문자열로 처리되기 때문에 에러가 발생하지 않는다고 한다.
하지만, api 호출하는데 있어서 undefined가 되면 로그인 에러가 떠야 함에도 불구하고 잘 작동되는것을 보면 원래는 api 주소가 맞았다는 뜻일텐데 애매한 부분만 남고 해결이 되어버렸다.
ref: https://stackoverflow.com/questions/58673430/error-secretorprivatekey-must-have-a-value