Passport 에러

캡틴 노드랭크·2021년 8월 29일
0

NodeJS

목록 보기
6/12

Unknown authentication strategy "signin"

이 에러는 새로운 전략을 짜놓고 사용하지 않았거나, 해당 여권 명이 다른 이유때문에 발생한다.

예시

  • 여권 명이 다른 경우

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를 인식하지 못해 사용하지 못한다.

Message: missing credential

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); 

...
  • missing credential 시 잘못 기입된 부분이 없는지 찾아보자

passport에서 새로운 전략을 작성해줄 때 첫번째 전달인자로 객체를 받는데, 이부분에서는 정확하게 입력을 해주어야한다.
다행이 vscode자동입력이 존재하지만, 한번쯤 확인해주는 것이 좋다.

let passportConfig = {
    usernameField: "email",
    passwordField: "password",
  };

	
  passport.use(
    "signin",
    new LocalStragegy(passportConfig, passportloginVerify)
  );

여기서 usernameFiled, passwordField 오타가 있는지 다시 확인 해볼것

profile
다시 처음부터 천천히... 급할필요가 없다.

0개의 댓글