WEB5 - Express passport.js

passport.js 플래쉬 메시지의 적용

수업소개

passport.js와 connect-flash를 연동하는 방법을 살펴보겠습니다. 

 

 

 

강의

 

 

 

소스코드

변경사항 

댓글

댓글 본문
  1. 진또베티
    질문입니다 custom callback이 아니면 failureFlash:true가 반영되기 전에 failureRedirect가 실행되는 것을 막을 방법은 없는건가요???
  2. 김윤석
    21.04.27
  3. jeisyoon
    2021.03.26 passport,js - Apply Flash Message - OK
    세션 프래쉬 메세지가 가끔 저장되지 않는 문제는 추후 해결키로 함....
  4. 생활둘기
    2021 1 7
  5. 우정현
    session-store로 session-file-store를 사용하다보니 발생하는 문제 같은데요,

    리디렉션됬음에도 불구하고 세션에 플래시메세지가 저장되지 않는 경우가 발생합니다.

    passport 공식홈페이지를 참조하여 로그인을 처리하는 로직을 커스텀 콜백으로 바꾸어서 해결하였습니다.

    (pm2 start main.js --watch --no-daemon --ignore-watch "data/* sessions/*" 로 실행합시다)

    app.post('/auth/login_process', (req, res, next) => {

    passport.authenticate('local',(err, user, info) => {

    if(req.session.flash) {
    req.session.flash = {}
    }

    req.flash('message', info.message)

    req.session.save(() => {

    if (err) {
    return next(err)
    }
    if (!user) {
    return res.redirect('/auth/login')
    }

    req.logIn(user, (err) => {
    if (err) {
    return next(err)
    }
    return req.session.save(() => {
    res.redirect('/')
    })
    })
    })

    })(req, res, next)
    })

    index.js, auth.js 에서 처리할때는

    let fmsg = req.flash()
    let feedback = ''

    if(fmsg.message) {
    feedback = fmsg.message
    }

    이렇게 받아오면 됩니다

    로그인 성공시 처리하는 done에서 메세지를 welcome으로 주셔야 합니다.
  6. ldhan0715
    20-09-21
  7. 착한얼굴에그러치모탄태도
    감사합니다
  8. 쑤우
    수강완료. 감사합니다~
  9. Junghun Han
    저도 pm2 끄고 하니깐 잘되네요
  10. 굼벵이
    완료
  11. Specialist
    어제 하도 안 되서 접고 오늘 다시 해봤는데
    혹시 플래쉬 메시지 잘 안 뜨시는 분들은 session부분에서 store: new FileStore() 부분을 주석처리하시거나 지우시면
    플래쉬 메시지 잘 나옵니다. 문득 생각나서 해봤는데 store부분만 없으면 잘 되네요.
    이상 어제 하루종일 삽질한 사람이었습니다 ㅠㅠ
  12. Specialist
    이 수업 듣고도 잘 안 되가지고 아래 댓글에 있는 코드 보고 하는 겁니다만....
    ++ 추가
    정확히 겪는 문제가 로그인 시 아이디나 비밀번호를 틀리게 되면 세션 파일에
    flash가 수 차례 안생기는 문제가 생깁니다. 현재 이 강의 영상에서 말이죠.
    flash가 세션파일에서 나타나면 정상적으로 동작합니다만 그 전까지는 아무런 반응이 없습니다...
    대화보기
    • egoing
      제가 수업을 제대로 못 만들어서 많은 분들이 고생을 하시네요. ^^;
      새롭게 개편된 수업을 소개해드립니다.
      https://opentutorials.org......655
      이 수업도 함께 보시면 어떨까해요.
      대화보기
      • Specialist
        포로리야 님 코드 참고해서 만들어봤는데 이게 맞는지 모르겠네요.....
        app.post('/auth/login_process', function(req, res, next){
        passport.authenticate('local', function(err, user, info){
        console.log(info);
        if(err) { return next(err) }
        if(!user){ return req.session.save(function(err){
        if(err){
        return next(err);
        }
        req.flash("error", info.message);
        return res.redirect('/auth/login');
        })
        }
        req.login(user, function(err){
        if(err){ return next(err); }
        return req.session.save(function(err){
        if(err){
        return next(err);
        }
        return res.redirect('/');
        });
        });
        })(req,res,next)
        });

        이렇게 하니까 세션 파일에서 flash message가 바로 갱신은 되는데
        req.flash를 쓰지 않고도 할 수 있는 방법이 있는지는 잘 모르겠네요....
        기존의 이고잉님의 강의 코드에서처럼 하면 서너번 계속 틀리게 해도 flash가 안 생기다가
        갑자기 생기고 그러거든요.. 이거때문에 3~4시간 삽질을 했습니다...

        진이 다 빠지네요... 제대로 되시는 분들 있으면 알려주세요!!

        ++추가++
        이 코드 그대로 집에와서 다시 해보니 또 안되네요 ㅠㅠ... 도대체 뭐가 문젠지..
      • Specialist
        passport는 제대로 되는게 없는건가요?? 이것도 바로바로 갱신이 안되네요...
      • goyacommae
        저는 세션을 쓸때 nodemon이 자동으로 세션파일이 변경됨에 따라 껏다키는 작업을 하고있더라구요
        그래서 바로바로 불러오지 못하는 거겠구요
        그럴때 nodemon -i ./sessions bin/www -i로 세션 을 제외한 나머지만 리프레쉬 하는 걸로 하면 잘됩니다
        pm2도 제외하는 기능 있을거에요..!
      • jo_onc
        세션정보를 바로바로 불러오지 못하네요... 따흐흑..
      • 삼고잉
        잘 읽었습니다
      • 포로리야
        저도 세션 반응이 늦거나 저장이 안되는 경우가 빈번하여 커스텀 콜백을 작성해서 썼습니다.

        app.post('/auth/login_process', function (req, res, next) {
        passport.authenticate('local', function (err, user, info) {
        console.log(info);
        if (info) { // info로 들어온 플래시 메세지 처리
        req.session.flash.error = [info.message];
        } else {
        req.session.flash.success = ['Welcome.'];
        }
        if (err) {
        return next(err);
        }
        if (!user) { // user에 정보가 안들어 왔을 경우
        return req.session.save(function (err) {
        if (err) {
        return next(err);
        }
        return res.redirect('/auth/login');
        })
        }
        req.logIn(user, function (err) { // (아마) 첫번재 인자를 serializeUser로 넘기고 콜백으로 그 이후 처리를 작성
        if (err) {
        return next(err);
        }
        return req.session.save(function (err) {
        if (err) {
        return next(err);
        }
        return res.redirect('/');
        });
        });
        })(req, res, next);
        });

        passport custom callback 문서를 참조하여 작성했어요
      • Kim Doyle
        저도 동일 증상이있었습니다, 로그인 확인 후 리다이렉션되는 것이 더욱 빨라서 세션의 반응을 따라 가지 못하는것 로그를 확인하여, 리다이렉션때 딜레이 시키는 방법을 찾아보았지만 전체적으로 딜레이를 시켜서 해결하였습니다.
        (리다이렉션에서만 또는 홈에서만 작동하는 방법은 남은 강의 후 적용해 보려합니다.. express-Timeout을 쓰면될꺼같긴하지만.....)

        npm에 express-delay 해당 미들웨어를 사용하였습니다.
        도움이 되었으면 좋겠습니다 !
        /1초로(1000) 했을때가 가장 정확히 반응을 하는데,
        실제 서비스라고 생각하면 너무 느려서 공부할때만 참고해주세요 ~
      • Hyung Jun Choi
        이전 토픽부터 로그인 후 세션이 반응이 왤케 느릴까요.. 로그인 시도를 두세번 반복해야 세션이 수정되네요..ㅠ
        왜이럴까요..ㅠ
      graphittie 자세히 보기