2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2023년 11월 8일 19:33 #103423
조원희참가자const sessionStore = new MySQLStore({ host: "어쩌구", port: 3306, user: "어쩌구", password: "어쩌구", database: "어쩌구", expiration: 30000, // 세션 만료 시간 createDatabaseTable: true, });
app.use(session({ secret: 'djWjrnwjWjrn', resave : false, saveUninitialized : true, store: sessionStore, cookie : { maxAge : 60 * 60 * 1000 } }));
app.use(passport.initialize()); app.use(passport.session());
passport.serializeUser(function(user, done){ const jsonUser = JSON.parse(JSON.stringify(user)); done(null, jsonUser.user_id )})
passport.deserializeUser(async (id, done) => { try { const user = await getUserFromDB(id, db); delete user.user_pass;
const jsonUser = JSON.parse(JSON.stringify(user)); done(null, jsonUser); console.log('유저db',jsonUser)
} catch (err) { done(err, null); } });
async function getUserFromDB(id, db) { return new Promise((resolve, reject) => { const sql = 'SELECT * FROM user_inf WHERE user_id = ?'; db.query(sql, [id], (error, results) => { if (error) { reject(error); } else { if (results.length > 0) { resolve(results[0]); } else { reject(new Error('사용자를 찾을 수 없습니다')); } } }); }); }
passport.use(new LocalStrategy( { usernameField: 'user_id', //폼에서 인풋 네임필드 passwordField: 'user_pw' //폼에서 인풋 네임필드 }, async (username, password, done) => { //로컬 전략 콜백 //유저가 입력한 아이디와비번이 심어짐 console.log('LocalStrategy', username, password);
try{
const sql = 'SELECT * FROM user_inf WHERE user_id = ?'; const params =[username]; db.query(sql,params, async (err, result)=>{ const user = result[0]; result = user; if(err){return done(err)} if(!result){ console.log(1) return done(null, false, {message: '아이디 틀림'}) } if(result.user_pass === password){ console.log(2) return done(null, result) }else{ console.log(3) return done(null,false, {message : '비번불일치'}) }
}); }catch (err){ return done(err); } } ));
app.post('/login', (req,res, next)=>{
passport.authenticate('local', (err,user,info)=>{
if(err) return res.status(500).json(err) if(!user) return res.status(401).json(info.message) req.login(user, (err)=>{ if(err) return next(err) res.redirect('/') })
})(req,res,next) });
코드는 이렇습니다
app.get('/checkSession', (req, res) => { if (req.isAuthenticated()) { console.log('체크',req.user) // 세션이 활성화된 경우 사용자 정보를 확인합니다. res.send('User session active: ' + req.user.user_id); } else { res.send('User not logged in.'); } });
체킹을 해봐도 정보는 보여집니다
다만 세션정보가 db 에 저장이 되지 않습니다
db mysql 입니다
db에는 session 테이블은 만들어집니다
db에 세션 집어넣기만 현재 2주째입니다
해결을 못하고있어요 ㅠㅠ
도와주세요 선생님
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.