5 글 보임 - 1 에서 5 까지 (총 5 중에서)
-
글쓴이글
-
2023년 1월 30일 13:45 #64925
정중식참가자갑자기 passport 세션 저장이안되는데.. 혹시 이렇게 코드짜는거 맞을까요?
const passport = require('passport'); const bcrypt = require('bcryptjs'); const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/User');
module.exports = function () { // 세션 저장 코드 passport.serializeUser(function (user, done) { console.log('야'); done(null, user.id); }); // 세션 해석 코드 , req.user passport.deserializeUser(async (id, done) => { const user = await User.findOne({ _id: id });
if (user) { done(null, user.id); } });
passport.use( new LocalStrategy( { usernameField: 'userId', passwordField: 'password', session: true, passReqToCallback: false, }, async (userId, password, done) => { const user = await User.findOne({ userId });
if (!user || user === null) { return done(null, false, { errors: [{ msg: '사용자가 존재하지 않습니다.' }], }); }
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) { return done(null, false, { errors: [{ msg: '비밀번호가 다릅니다.' }], }); }
return done(null, user); } ) ); };
passport.use( new LocalStrategy(.... 이부분은 잘 동작하는데, 아래 부분이 동작을 안하는거같습니다. 콘솔찍어도 아무런 반응이없구요..
// 세션 저장 코드 passport.serializeUser(function (user, done) { console.log('야'); done(null, user.id); }); // 세션 해석 코드 , req.user passport.deserializeUser(async (id, done) => { const user = await User.findOne({ _id: id });
if (user) { done(null, user.id); } });
2023년 1월 30일 14:08 #64927
정중식참가자server.js
require('dotenv').config(); const express = require('express'); const connectDB = require('./config/db'); const path = require('path'); const passport = require('passport'); const session = require('express-session'); const loginPassport = require('./middleware/loginPassport'); // const isLogin = require('./middleware/auth');
const app = express();
connectDB();
app.use(express.urlencoded({ extended: true })); app.use('/public', express.static('public'));
loginPassport();
app.use( session({ secret: process.env.SESSION_SECRET, resave: true, saveUninitialized: false, }) ); app.use(passport.initialize()); app.use(passport.session());
app.set('view engine', 'ejs');
app.get('/', function (req, res) { console.log(req.user); res.render('index.ejs', { user: req.user }); });
app.use('/', require('./routes/users')); app.use('/', require('./routes/posts'));
app.listen(process.env.PORT, function () { console.log('listening on port 8080'); });
혹시 몰라 server.js 코드도 첨부했습니다. 계속 스택오버플로우 뒤지면서 원인을 찾고있는데.. 의견좀 여쭙고싶습니다
2023년 1월 30일 15:24 #64940
정중식참가자추가로 이렇게 순서를 바꿔봐도 세션저장코드가 안먹는거같습니다.
app.use( session({ secret: process.env.SESSION_SECRET, resave: true, saveUninitialized: false, }) );
loginPassport();
app.use(passport.initialize()); app.use(passport.session());
2023년 1월 30일 15:30 #64948
정중식참가자질문이 좀 보기 지저분하네요 죄송합니다. 그래도 원인을 찾았습니다.
// 로그인 router.post('/login', (req, res, next) => { passport.authenticate('local', (err, user, info) => { if (err) { return next(err); }
// loginPassport.js에서 인증 실패한 메시지가 나옴 if (info) { return res.status(401).json(info); }
if (!user) { return res.status(401).json({ errors: [{ msg: 'authentication fail!' }], }); }
return res.send({ success: true, message: 'authentication succeeded' }); })(req, res, next); }); 이 부분이 잘못인데요, 근데 왜 잘못인지 모르겠습니다. 음.. 맞게고쳐주려면 어떤식으로 바꿔줘야하는지 갈피를 못잡겠습니다..
2023년 1월 30일 15:35 #64949
정중식참가자진짜 마지막.. 해결완료
제 입맛대로 바꾼다고바꿧던거를 삭제하면안될부분을 삭제하고 사용했었네요
// 로그인 router.post('/login', function (req, res, next) { passport.authenticate('local', function (err, user, info) { if (err) { return next(err); }
// loginPassport.js에서 인증 실패한 메시지가 나옴 if (info) { return res.status(401).json(info); }
if (!user) { return res.status(401).json({ errors: [{ msg: 'authentication fail!' }], }); }
req.login(user, (loginErr) => { if (loginErr) { return next(loginErr); } return res.send({ success: true, message: 'authentication succeeded' }); }); })(req, res, next); });
-
글쓴이글
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
- 답변은 로그인 후 가능합니다.