'node.js passport -local'에 해당되는 글 1건

우선 http://bcho.tistory.com/920 이걸 본다.

그리고 http://passportjs.org/guide/ 이걸본다. 


https://github.com/manjeshpv/node-express-passport-mysql   mysql+passport..


여기서 이해 안되는 건 1)serialize와 deserialize인데 도대체 done 에 user.id 의 정체는 무엇인가?


1)serializeUser 메서드에서는 function(user,done)을 이용해서 session에 저장할 정보를 done(null,user)과 같이 두번째 인자로 넘기면 된다. 이때 user로 넘어오는 정보는 앞의 LocalStrategy 객체의 인증함수에서 done(null,user)에 의해 리턴된 값이 넘어온다.


2) req.flash 가  express 3.0부터 deprecated 되어 connect-flash 모듈을 깔고 require('connect-flash') 을 해주어야 한다.

   그 다음 app.use(flash()); 을 해줘야 한다. 


+ 여기서 오류가 났다. req.flash() requires sessions 오류인데..

공식 홈에서는 


Alternatively, the flash message can be set specifically.

passport.authenticate('local', { failureFlash: 'Invalid username or password.' });

successFlash option is available which flashes a success message when authentication succeeds.

passport.authenticate('local', { successFlash: 'Welcome!' });

이렇게 가이드를 하고 있다.  req.flash()는 Express 3.0에서는 deprecated 되어 connect-flash 모듈을 설치해야만 사용이 가능하다.

npm에서 connect-flash 모듈을 검색한 후 공식 사용설명서를 보면 이렇게 안내하고 있다.

var flash = require('connect-flash');
var app = express();

app.configure(function() {
  app.use(express.cookieParser('keyboard cat'));
  app.use(express.session({ cookie: { maxAge: 60000 }}));
  app.use(flash());
});


이런식으로 설정후에 사용한다. 주의사항은 app.configure flash  설정 부분이 app.use(app.router) 설정 위에 위치 해야한다는 것이다.

그렇지 않으면 object # incomingmessage has no method 'flash' 와 같은 오류가 발생한다. 


3) ajax 로그인을 구현하고자 할 때..

bootstarp과 함께 jqbootstarpvalidation plug-in을 써서 ajax로 로그인을 구현하였다. ajax로 로그인을 구현하고자 할 때에는 공식홈에서 가이드 하고 있는 custom callbak을 이용하였다.

Custom Callback

If the built-in options are not sufficient for handling an authentication request, a custom callback can be provided to allow the application to handle success or failure.

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});

In this example, note that authenticate() is called from within the route handler, rather than being used as route middleware. This gives the callback access to the req and res objects through closure.

If authentication failed, user will be set to false. If an exception occurred, err will be set. An optional infoargument will be passed, containing additional details provided by the strategy's verify callback.

The callback can use the arguments supplied to handle the authentication result as desired. Note that when using a custom callback, it becomes the application's responsibility to establish a session (by callingreq.login()) and send a response.

 Custom CallBack을 이용한다. 모든 클라이언트 요청은 동기 또는 비동기로 나눌 수 있다. 비동기 방식은 ajax로 구현을 많이 하는데 모든 저명한 모듈이나 플러그인들은 ajax를 지원하는 것 같다. 


클라이언트 단에서는 


 $('#login_form').find('input,select,textarea').not('[type=submit]').jqBootstrapValidation({

        submitSuccess: function ($form, event) {

          $.ajax({

            type: 'POST',

            url: $form.attr('action'),

            data: $form.serialize(),

            success: function(data)

            { 

                

              // just to confirm ajax submission

              $('#login_message').show(100);

              document.getElementById('login_message').innerHTML=data.message;




              //만약 로그인에 성공하면 page replace!

              if(data.type) {

                  var URL = '/user/'+data.alias;

                  location.replace(URL);

              }
            }

          });

          // will not trigger the default submission in favor of the ajax function

          event.preventDefault();

        }


이런식으로 요청을 넣고, 서버단에서는 CustomCallback을 이용해서 ajax에 응답한다. 여기서 중요한 것은 req.logiin인데 이 부분이 세션에 저장된 value를 얻어오고 또 활용할 수 있는 부분이므로 이에 주의해서 코딩할 필요가 있다. 

'프로그램 > node.js' 카테고리의 다른 글

node.js와 paypal 결제시스템 연동(1)  (0) 2015.05.13
passport-local  (0) 2015.03.27
인코딩문제(iconv를 통한 해결)  (0) 2015.03.27
node.js http request 모듈  (0) 2015.03.27
node-gyp 관련에러  (0) 2015.03.27
npm install 관련 오류  (0) 2015.03.27
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요