Strategy의 done에 대해 질문드립니다.
364
投稿した質問数 49
local의 경우,
passport.use(
new LocalStrategy(
{
usernameField: "email", // req.body.email
passwordField: "password", // req.body.password
},
async (email, password, done) => {
try {
const exUser = await User.findOne({ where: { email } });
if (exUser) {
const result = await bcrypt.compare(password, exUser.password);
if (result) {
done(null, exUser);
} else {
done(null, false, { message: "비밀번호가 다릅니다." });
}
} else {
done(null, false, { message: "가입되지 않은 회원입니다." });
}
} catch (e) {
console.error(e);
done(e);
}
}
)
);에서 done이 실행되면,
authRouter.post("/login", (req, res, next) => {
passport.authenticate("local", (err, user, info) => {
if (err) {
console.error(err);
return next(err);
}
if (!user) {
return res.redirect("/login");
}
return req.login(user, (err) => {
if (err) {
console.error(err);
return next(err);
}
// 여기서 { id : 3, "connect.sid" : s%31241432525 }에 저장된 cookie를 브라우저로 보냄
return res.redirect("/");
});
})(req, res, next);
});passport.authenticate의 콜백함수로 이동한다고 이해했습니다.
oauth의 경우,
passport.use(
new KakaoStrategy(
{
clientID: process.env.KAKAO_ID,
callbackURL: "/auth/kakao/callback",
},
async (accessToekn, refreshToken, profile, done) => {
try {
const exUser = await User.findOne({
where: { snsId: profile.id, provider: "kakao" },
});
if (exUser) {
done(null, exUser);
} else {
const newUser = await User.create({
email: profile._json && profile._json.kakao_account_email,
nick: profile.displayName,
snsId: profile.id,
provider: "kakao",
});
done(null, newUser);
}
} catch (e) {
console.error(e);
done(e);
}
}
)
);에서 done이 실행되면 마찬가지로 done을
(err, user, info) => {} 와 같은 콜백방식으로 받아야 하지 않나요? 미들웨어 확장법을 사용하지 않고
authRouter.get(
"/kakao/callback",
passport.authenticate(
"kakao",
{
failureRedirect: "/login",
},
(req, res) => {
res.redirect("/");
}
)
);방법이 가능한 이유가 궁금합니다.
回答 1
1
이게 설명하기가 좀 난감한데요. 애초에 그렇게 만들어졌기 때문입니다.
passport-kakao같은 것은 done이 호출되었을 때 에러가 없다면 (req, res) => {} 로 이동합니다. req.login같은 것은 passport-kakao 내부에서 처리해버렸기 때문입니다.
리눅스 노드 설치시 패키지
0
159
0
socket.js 에서 referer로부터 roomId를 가져올 때
0
905
3
스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문
0
2281
2
a[title] 질문드립니다
0
375
1
리뉴얼 강의 및 공부 방법
0
581
1
jwt decode
0
1128
1
node.js 교과서 3판 질문드립니다
0
391
1
passport와 jwt
0
432
1
리뉴얼 강의
0
418
2
혹시 Node.js 교과서 3판 이북은 언제 나오나요?
0
353
1
몽고디비 사용자도 MYSQL부분을 들어야 하나요???
0
481
1
sql 쿼리 로그는 어떤 모듈이 작성하나요?
0
505
2
nunjucks res.render('error'); 작동을 안합니다.
0
511
1
질문있습니다.
0
346
1
multer 한글 파일 업로드시 파일명이 깨져요.
1
3535
1
수업자료는 어디있나요?
0
366
1
질문 있습니디
0
235
1
multer 사용시 file 외 name값은 못받나용?
0
416
1
코드 중복 부분 질문드립니다.
0
298
1
api 만드는 이유 질문드립니다.
0
286
1
안녕하세요 fs 권한 관련 질문드립니다
0
448
1
시퀄라이즈 연결질문...
0
495
2
res.setHeader vs res.cookie
0
1786
3
실무에서의 에러처리에 대해 질문드립니다.
0
205
1

