1. 에러의 원인
req.flash is not a function 이 나타나는 에러의 원인은 다양한 것 같다.
정확하게 에러의 원인이 이것이다! 하고 단정하기는 어렵지만 서칭을 해보니
2가지의 원인이 있는 것 같다
- authenticate 에서 에러가 뜨는 상황
- req.flash를 사용헤 flash 메세지를 얻어오려는데 못얻어오는 상황.
나의 경우에는 req.flash 를 사용하지 않았는데 위 에러가 떴기에 좀 찾는데 시간이 오래 걸렸었다.
2. 해결 방법
1) Passport 사용시 Client에서 서버로 요청까지는 보내지는데 authenticate 에서 에러가 뜨는 상황
login 모듈을 사용시에 LocalStrategy 통해 로그인 정보를 받는다
passport.use(new LocalStrategy({ // local 전략을 세움
usernameField: 'id',
passwordField: 'pw',
session: true, // 세션에 저장 여부
passReqToCallback: false,
}, (id, password, done) => { ... }
이 때 아래와 같이 usernameField, passwordField 에 form 의 어떤 정보를 받을지 기입을 해줘야되는데
form 에서 전달받는 id, name 형식과 LocalStrategy 에 저장된 key 가 다르면 받아들이지를 않기에
req. flash 에러가 뜰 수 있다.
req.flash 를 사용하지 않았는데 위 에러가 뜨면 설정한 field 가 일치하는지 살펴봐야겠다.
2) req.flash 를 사용했는데 에러가 뜨는 상황
이런 에러는 사소한 이유로 발생을 하는것 같다. 하직 해당 에러를 겪지는 않았기에
추후에 에러를 찾을 경우 대비해 아래 링크 기록해둔다
https://www.inflearn.com/questions/8701
https://stackoverflow.com/questions/34310348/passport-and-connect-flash-req-flash-is-not-a-function
https://unordinarydays.tistory.com/119