일단,
1. 프론트로 부터 받아온 req.body 를 찍으니 아래와 같이 잘 넘어 왔구요.
그 다음 아래 app.js info로 넘어온 데이터가 저렇게 missing credentials로 나옵니다.
이전에 다른 수강생분께서 질문주신대로 잘 맞춰서 했다고 생각하는데
어디가 이상이 있는건지 문의 드립니다..
2. 백엔드 app.js 에서 로그인 받는 부분 입니다.
app.post('/user/login', async(req, res, next) => {
console.log('/user/login-----> ', req.body);
try {
// -> passport LocalStrategy 으로 전송.
passport.authenticate('local', (err, user, info) =>{
if (err) {
console.log('[post]/user/login (Error) ', err);
return next(err);
}
if (info) {
console.log('[post]/user/login (Fail) ', info);
return res.status(401).send(info);
}
console.log('[post]/user/login ', user);
// 세션에다 사용자 정보 저장( 어떻게 저장할 것인가? )
return req.login(user, async(err) => {
if (err) {
return next(err);
}
return res.json(user);
});
})(res, req, next);
}
catch(err) {
}
});
3. passport/local.js 코드 입니다.
여기에서도 usernameField랑 passwordField에 저기 1번에서 넘어온 parameter그대로 사용해서 해줬는데요.
왜 자꾸 missing credentails가 뜨는지... 도통 해결을 못하겠네요 ㅜㅜ
const passport = require('passport');
const { Strategy: LocalStrategy } = require('passport-local');
const db = require('../models');
const bcrypt = require('bcrypt');
module.exports = () => {
passport.use( new LocalStrategy(
{
usernameField: 'myid', // req.body.myid
passwordField: 'password', //req.body.password
}, async (myid, password, done) => {
try {
console.log('******* passport / local ', myid, password);
// 사용자 여부 체크
const existUser = await db.User.findOne({
where: { myid }
});
if (!exexistUser) {
// done(에러, 성공, 실패)
return done(null, false, { reason: '존재 하지 않는 사용자 입니다. ' });
}
// 비밀번호 체크
const result = await bcrypt.compare(password, existUser.password);
// 만약 패스워드가 일치 하지 않으면, false
if (result) {
return done(null, existUser);
} else {
return done(null, false, { reason: '비밀번호가 틀립니다.' });
}
} catch (err) {
console.log(err);
return done(err);
}
}
));
}