3 글 보임 - 1 에서 3 까지 (총 3 중에서)
-
글쓴이글
-
2023년 8월 29일 19:29 #96263
박승재참가자로그인 기능을 기존 submit에서 ajax 사용하는 걸로 변경했습니다. 다른 분 질문에 달아주신 아래 링크 참고해서 변경했구요, ajax요청 후 결과 메시지 받는 것까진 성공했는데 passport.deserializeUser << 이친구가 동작을 안하는지 콘솔도 안찍히고 로그인 유지가 안됩니다. 코드 작성을 잘못한걸까요? ## 참고한 링크 : https://stackoverflow.com/questions/15711127/express-passport-node-js-error-handling ## 프론트 $(function() { $('#submit').on('click', (e) => { const data = $('#loginForm').serialize(); const callback = (result) => { if(result.success) { location.replace('/'); } else { alert(result.message); } } requestAjax('/login', 'POST', data, callback); }); });
// ## 백단 // 로그인 여부 검증과정 passport.use(new LocalStrategy({ usernameField: 'id', passwordField: 'pw', session: true, passReqToCallback: true, }, async (req, inputId, inputPw, done) => { req.app.db.collection('login').findOne({ id: inputId }).then(result => { try { if (!result) return done(null, false, { message : '존재하지 않는 아이디입니다.' }); // done (서버에러, 사용자정보, 에러메시지) if (inputPw == result.pw) { return done(null, result); } else { return done(null, false, { message: '비밀번호가 일치하지 않습니다.' }); } } catch { return done(result); } }); })); // 세션 유지를 위한 쿠키생성 passport.serializeUser((user, done) => { done(null, user.id); }); passport.deserializeUser((req, id, done) => { req.app.db.collection('login').findOne({ id : id }).then(result => { result.pw = ''; done(null, result); }); });
router.post('/login', (req, res, next) => { passport.authenticate( 'local', { successRedirect: '/', failWithError: true }, (err, user, info) => { if (err) { return next(err); }
if(info) { return res.status(202).json({ success: false, message: info.message }); }
if (!user) { return res.status(401).json({ errors: [{ msg: '사용자가 존재하지 않습니다.' }], }); } return res.status(200).json({ success: true, message: '인증 성공' }); } )(req, res, next); });
-
글쓴이글
3 글 보임 - 1 에서 3 까지 (총 3 중에서)
- 답변은 로그인 후 가능합니다.