passport.js 2.68 KB
var LocalStrategy = require('passport-local').Strategy;
var Users = require('./models/users');

module.exports = function(passport)
{
    passport.serializeUser(function(user, done)
    {
        done(null, user.id);
    });

    passport.deserializeUser(function(id, done)
    {
        done(null, id);
        /*
        Users.findById(id, function(err, user)
        {
            done(err, user);
        });
        */
    });

    // 회원가입 처리
    passport.use('join', new LocalStrategy
    (
        {
            usernameField: 'id',
            passwordField: 'pwd',
            passReqToCallback: true
        },

        function(req, id, pwd, done)
        {
            Users.findOne({'id':id}, function(err, user)
            {
                if(err) return done(err);
                
                // 유저가 있을 경우 처리
                if(user)
                {
                    console.log("Duplicated user");
                    return done(null, false);
                }
                
                // 새로운 유저 DB추가처리
                else
                {
                    var newUser = new Users();
                    newUser.id = id;
                    newUser.pwd = newUser.generateHash(pwd);

                    // 로그인 이외 필요한 값들 추가
                    newUser.name = req.body.name;

                    newUser.save(function(err)
                    {
                        if(err) throw err;
                        return done(null, newUser);
                    });

                }
            });
        }));

    // 로그인 처리
    passport.use('login', new LocalStrategy
    (
        {
            usernameField: 'id',
            passwordField: 'pwd',
            passReqToCallback: true
        },
        function(req, id, pwd, done)
        {
            Users.findOne({'id': id}, function(err, user)
            {
                if(err) return done(err);
                
                // 유저가 없을 시
                if(!user)
                {
                    console.log('no user');
                    return done(null, false);
                    //return done(null, false, req.flash('loginMessage', '없는 유저입니다..')); 
                }

                // 틀린 비밀번호
                if(!user.validPassword(pwd))
                {
                    console.log('bad password');
                    return done(null, false);
                    //return done(null, false, req.flash('loginMessage', '비밀번호가 다릅니다.')); 
                }

                console.log('login sucess');
                return done(null, user);
            });
        }
    ));

}