Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- python popen
- gcc regex
- gcc 업데이트
- selinux port 등록
- centos pyhon 설치
- snmp test
- grafana dashboard
- regex_search
- 정규식 문자열 출력
- g++ 업데이트
- c3 second
- c3 축 없애기
- 정규식 활용
- CentOS7
- c3 축 가리기
- 백준
- python subprocess
- snmp
- InfluxDB
- c3 step graph
- linux시간으로 변경
- 정규식 컴파일
- telegraf
- semanage
- influxdb 설치
- subporcess path
- c++ 정규식
- python os
- c3 초
- 1697
Archives
- Today
- Total
리셋 되지 말자
[NodeJS] session 정보 저장 문제 해결 본문
문제 인식
(github.com/jaredhanson/passport/issues/306)
req.login 함수가 async 즉 비동기라는 것이다. 이를 이용하여 /auth/login_process를 수정한다.
문제 해결
- deserializeUser 수정
passport.deserializeUser(function (id, done) {
console.log('deserialize', id);
const authData = {
email:'rudwns273@naver.com',
password:'12345',
nickname:'rudwns'
}
done(null, authData);
});
deserializeUser는 사용자가 로그인을 한 후에, 페이지에 접속할 때마다 실행되는 함수이다. authData를 전역으로 선언해줬어야하는데 임시방편으로 passport.use(new LocalStrategy)에서 선언한 authData를 똑같이 안에 선언해 주었다.
- /auth/login_process 수정
app.post('/auth/login_process',
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/auth/login' }
));
app.post('/auth/login_process', passport.authenticate('local'), function (req, res) {
req.session.save(function () {
console.log('session save....');
res.redirect('/');
})
});
위가 수정 전이고, 아래가 수정 후이다. session에 정보를 저장한 후에 '/'페이지로 redirect 하도록 하였다.
- 결과
접속을 하면 먼저 req.user가 undefined로 출력이 되는걸 확인할 수 있다.
로그인 페이지로 이동한 뒤에 로그인을 위해 입력한 정보가 출력이 된 후에로그인을 하면, serialize 함수가 실행되고, email을 session에 저장한다. 그리고 redierect로 '/'로 이동하면, req.user가 생성되어 main {email, password, nickname}이 출력되는 것을 확인할 수있고, 페이지에 접속할 때마다 deserialize 함수가 실행되는 것을 확인할 수 있다.
하지만 이 코드로는 로그인에 실패 했을 때의 예외 처리를 할 수 없다. 이를 위해 코드를 수정한다.
로그인 실패 시 예외 처리
app.post('/auth/login_process', passport.authenticate('local',
{failureRedirect: '/auth/login'}),
function(req, res){
req.session.save(function(){
console.log('session save...');
res.redirect('/');
})
})
실패했을 시에 다시 login 페이지로, 성공했을 때는 '/'로 redirect 되도록 수정하였다.
- 공식 문서의 custom callback
app.post('/auth/login_process', function (req, res, next) {
passport.authenticate('local', function (err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/auth/login'); }
req.logIn(user, function (err) {
if (err) { return next(err); }
req.session.save(function () {
res.redirect('/');
});
});
})(req, res, next);
});
'NodeJS' 카테고리의 다른 글
[express] session store 삭제 (0) | 2020.10.12 |
---|---|
[NodeJS] Connect-flash를 이용한 알림 메시지 (0) | 2020.10.05 |
[express] 미들웨어 종류와 실행 순서 (0) | 2020.09.23 |
[NodeJS] nodejs 동기/비동기 테스트 (0) | 2020.09.16 |
[NodeJS] nodejs 그림 불러오기 (4) | 2020.09.16 |
Comments