WEB6 - Multi User Auth
로그인 구현
2018-08-13
수업소개
로그인 기능을 구현하는 방법에 대해서 알아봅니다.
강의
소스코드
변경사항
봤어요
51명
세션 스토어에 인증 정보 저장
접근제어 - 글쓰기
댓글
댓글 본문
댓글을 작성하려면 로그인하셔야 합니다.
김윤석
3년 전
21.04.29
답글
jeisyoon
3년 전
2021.03.28 로그인 구현 - OK
답글
김명일
3년 전
express-session의 session store를 lowdb-session-store모듈로 변경하니 로그인 하자마자 바로 뜨도록 됩니다.
https://www.npmjs.com......ore
main.js에 해당 부분을 추가하고
const LowdbStore = require("lowdb-session-store")(session);
app.use(session({
secret: '@23t45623!#513res',
resave: false,
saveUninitialized: false,
store: new LowdbStore(db.get('sessions'), {
ttl: 86400
})
}))
db.js에서
db.defaults({ users: [], sessions: [] }).write();
위와같이 sessions를 추가해주면 잘 되네요.
답글
생활둘기
3년 전
2021 2 17
답글
ldhan0715
4년 전
wwwe님 뭐하는 분이시죠? 모든 강의에 긴 양의 URL들을 적어놓고 이게 뭐하는 짓입니까? 게다가 URL은 모두 확인해보니 빠짐없이 피싱사이트고요. 당신같은 사람 때문에 인터넷이 더러워지는 겁니다.
대화보기
답글
쑤우
4년 전
수강완료. 감사합니다~
답글
착한얼굴에그러치모탄태도
4년 전
문제는
pm2 start main.js --watch --no-daemon --ignore-watch="sessions/* db.json" 으로 해결하면 됨
답글
착한얼굴에그러치모탄태도
4년 전
감사합니다
답글
굼벵이
5년 전
완료
답글
수정
삭제
넘좋다
5년 전
deserializeUser 미들웨어의 위치를 바꾸는건 어떨까요?
답글
수정
삭제
jo_onc
6년 전
저는 ignore 기능을 이용해도 문제가 해결되지 않아서 알려주신 방법을 적용해보니 아주 잘 작동하네요.
감사합니다!
대화보기
답글
수정
삭제
삼고잉
6년 전
잘 읽었습니다
답글
포로리야
6년 전
더 좋은 방법을 찾았네요
pm2 같은 프로세서 관리 프로그램 중에 파일이 수정되면 자동으로 restart하는 기능이 문제였습니다. (pm2는 --watch)
session.save의 매커니즘이 어떻게 되는지는 모르겠지만
미들웨어가 sessions 파일을 건드리면 pm2가 파일이 변경된것으로 인식해 재시작 되면서
session에 serialize가 안되는 문제가 생깁니다.
pm2 에 --watch를 넣지 않고 수동으로 재시작 해주던가
pm2 --watch --igonore-watch="sessions/* db.json"
이렇게 ignore 옵션을 넣어주면 해당 디렉토리의 모든 파일이나 지정된 파일이 수정되어도 무시합니다.
대화보기
답글
포로리야
6년 전
옵션을 객체로 간편하게 넘겨서 사용하는 passport.authenticate 메소드는 메모리에 있는 session 정보가 redirect 되기 전에 파일로 기록되지 않는 것 같습니다.
아마 비동기식으로 response의 redirect처리가 먼저되어 페이지가 로딩되고 그후에 session 정보가 파일로 저장 되는 것 같네요.
저는 passport.authenticate에 redirect 되기 전에 파일로 기록하는 custom callback을 만들어서 사용하였습니다.
router.post('/login_process', function (req, res, next) {
passport.authenticate('local', function (err, user, info) {
if (err) {
return next(err);
}
if (!user) {
req.flash('error', info.message);
return req.session.save(function (err) {
if (err) {
return next(err);
}
return res.redirect('/auth/login');
})
}
req.login(user, function (err) {
if (err) {
return next(err);
}
req.flash('success', info.message);
return req.session.save(function (err) {
if (err) {
return next(err);
}
return res.redirect('/');
});
});
})(req, res, next);
});
답글
더 보기