1. Unknown authentication strategy "local"
passport 셋팅 및 프론트와의 회원가입,로그인 연동을 진행하면서 해당 에러가 발생했다.
말 그대로 local을 찾을 수 없다는데, 이미 passport에 local.js는 정상적으로 코드가 작성되어있고, 연결되어있었다.
// passport/local.js
const passport = require("passport");
const bcrypt = require("bcrypt");
const { Strategy: LocalStrategy } = require("passport-local");
const db = require("../models");
//이 로컬스트레지는 자동으로 실행이 되는게 아니라 우리가 실행 시켜주어야 한다.
//로그인 요청이 들어왔을때. app.js/ app.post에서.
module.exports = () => {
passport.use(
new LocalStrategy(
{
//검사가 이루어지며, 아래 email과 password가 있는 자리에는 body에 해당되는 것을 넣어주면 된다.
usernameField: "email", //req.body.email
passwordField: "password" // req.body.password
},
.
.
.
이럴때에는 local을 한번 실행해줘서 등록절차를 밟아야 정상적으로 실행된다.
passport폴더의 index.js파일에 등록절차를 밟아주도록 한다.
// passport/index.js
const passport = require("passport");
const local = require("./local");
const db = require("../models");
module.exports = () => {
passport.serializeUser((user, done) => {
return done(null, user.id);
});
passport.deserializeUser(async (id, done) => {
try {
const user = await db.User.findeOne({ where: { id } });
return done(null, user);
} catch (err) {
console.error(err);
return done(err);
}
});
//실행을 한번 시켜줘야 등록이 될 것이다.
local();
};
이런식으로 한번 실행을 시켜주면 정상적으로 작동한다.
2. Error: failed to serialize user into session
위의 local을 찾을 수 없다던 에러를 해결하고나니 이번엔 세션을 연결하지 못했다는 에러가 뜬다
나도 이 에러때문에 1시간을 아깝게 날려먹었지만 알고보니 간단한 문제였다.
메인 app.js에서 passportConfig()를 연결해주어야 비로소 세션이 패스포트를 타고 잘 흘러가게 된다.
// app.js
const db = require("./models");
const passportConfig = require("./passport");
const app = express();
//서버시작할때 app.js가 실행되면서 db.sequelize.sync가 같이 실행됨
//sync괄호 옆의 force:true하면 서버 열때마다 데이터가 초기화된다.
db.sequelize.sync();
passportConfig();
.
.
.
passportConfig()를 통해 비로소 원활하게 연동이 완료되었다.
'Node.js' 카테고리의 다른 글
npm --save가 동작하지 않을때.(package.json저장) (0) | 2019.12.19 |
---|---|
첫 Node webserver 구동 (0) | 2019.10.29 |
node.js설치 (0) | 2019.10.29 |