선생님 그러면
react로 client에서 axios로 로그인 요청하고
passport로 로그인처리하고 세션정보를 저장할떄
로그인 성공하자마자 client로 세션정보를 넘겨줄방법없을까요?
app.post('/login', passport.authenticate('local', {failureRedirect : '/fail'}), function(요청, 응답){
});
passport.use(new LocalStrategy({
usernameField: 'username', //client에서 보내준 id,pw명
passwordField: 'password',
session: true,
passReqToCallback: false,
}, function (입력한아이디, 입력한비번, done) { // 보내준 id,pw가 db정보와 일치하는지 검증
db.collection('user').findOne({ id: 입력한아이디 }, function (에러, 결과) {
if (에러) return done(에러)
if (!결과) return done(null, false, { message: '존재하지않는 아이디요' })
if (입력한비번 == 결과.pw) {
return done(null, 결과)
} else {
return done(null, false, { message: '비번틀렸어요' })
}
})
}));
passport.serializeUser(function (user, done) { //로그인성공시 세션을 저장시키는 코드
done(null, user.id) //user.id정보로 세션을만듬
});
passport.deserializeUser(function (아이디, done) { //마이페이지같은거 접속할때 발생(이 세션정보가진사람을 db에서 찾아주세요)
done(null, {})
});
server 부분
============================================================
const loginHandler = async(e)=>{
try{
e.preventDefault();
const result = await axios.post("http://localhost:5000/login" , { username , password })
history.push("/")
}
catch(err){
console.log(err)
}
}
<form onSubmit={loginHandler}>
<CustomInput label="ID" value={username} setValue={setUserName}/>
<CustomInput label="비밀번호" type="password" value={password} setValue={setPassword}/>
<button type="submit">로그인</button>
</form>
client부분
입니다