이 에러는 새로운 전략을 짜놓고 사용하지 않았거나, 해당 여권 명이 다른 이유때문에 발생한다.
passport.js
passport.use(
"google",
new GoogleStrategy(
대충 코드
)
);
router.js
router.get(
"/auth/google",
passport.authenticate("googl", { scope: ["profile", "email"] })
);
router.get(
"/auth/google/callback",
passport.authenticate("googl", {
session: false,
successRedirect: "/",
failureRedirect: "/auth/login",
})
);
app.js
.
.
.
app.use(cors(corsOption));
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.use(passport.initialize());
.
.
.
위 코드에서 app.use(passport.initialize())
만 보인다. passport 를 사용했지만
router.js
에서 passport를 인식하지 못해 사용하지 못한다.
passport
로컬로 로그인코드 작성 후 Postman
혹은 실제 클라이언트에서 auth
폼으로 테스트 할경우
signin: async (req, res, next) => {
try {
passport.authenticate("signin", (err, user, info) => {
if (err || !user) {
res.status(400).json({ message: info });
return;
}
이 코드 중
if(err || !user}
단락에서 에러를 표출하는데, 원인은 클라이언트 측 폼을 잘못 입력하였거나, new LocalStragegy()
의 첫번째 인자에 들어갈 내용을 잘못 입력했거나 문제가 있을 것이다.
./passport
를 루트파일 내에서 passport를 적용해줘야함.
module.exports = (passport) => {
passport.use(
"google",
new GoogleStrategy(
대충 코드
)
);
}
passport.use
로 작성된 코드 모두 모듈로 감싸준뒤 exports
한다. 이때 파라미터는 루트
파일 내에서 passport로 전달해줘야하기 때문에 passport
로 작성.
app.js
const passport = require('passport');
const passports = require('./config/passport');
...
app.use(passport.initialize());
passports(passport);
이렇게 작성해준다.
혹은
const passport = require('passport');
require('./config/passport')(passport);
...
passport
에서 새로운 전략을 작성해줄 때 첫번째 전달인자로 객체를 받는데, 이부분에서는 정확하게 입력을 해주어야한다.
다행이 vscode
자동입력이 존재하지만, 한번쯤 확인해주는 것이 좋다.
let passportConfig = {
usernameField: "email",
passwordField: "password",
};
passport.use(
"signin",
new LocalStragegy(passportConfig, passportloginVerify)
);
여기서 usernameFiled, passwordField
오타가 있는지 다시 확인 해볼것