samedi 5 mai 2018

I think my local stratgey is not called passport js and nodejs

auth.js

var express = require('express');
var passport = require('passport');
var router = express.Router();
var path = require('path');
var mongoose = require('mongoose');
var session = require('express-session');
var flash = require('connect-flash');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var app = express(); 

require('./db/passport')(passport);


var colors = ["red", "orange", "yellow", "olive", "green", "teal", "blue", "violet", "purple", "pink", "brown"];



router.get('/login', function(req, res, next) {
  res.render('auth/login', { title: 'URKC Login', color: colors[Math.round(Math.random() * colors.length)] });
});


router.get('/register', function(req, res, next) {
  res.render('auth/register', { title: 'URKC Registration', color: colors[Math.round(Math.random() * colors.length)]  });
});



router.post('/register', passport.authenticate('local-signup',{
  successRedirect : '/login',
  failureRedirect : '/register',
  failureFlash: true
}));

// router.post('/register', passport.authenticate('local-signup'), function(req, res){
//   console.log("passport user", req.user);
// });
// router.post('/login', passport.authenticate('local-signin',{
//   successRedirect : '/',
//   failureRedirect : '/login',
//   failureFlash: true
// }));

// router.post("/register",
//  function(req,res,next){
//    passport.authenticate("local-signup", function(err, user, info){


//   })(req,res,next); 
// })
module.exports = router;

passport.js

var LocalStrategy = require('passport-local').Strategy;
var User = require('./ModelUser');

module.exports = function(passport){
   passport.serializeUser(function(user, done){ // save in session
      done(null, user.id); 
    });
    passport.deserializeUser(function(id, done){ //compare with db and session
      User.findById(id, function(err, user){
        done(err, user);
      })
    });

    //signupe
  passport.use('local-signup', new LocalStrategy({ 
      usernameField: 'email', 
      passwordField: 'password',
      passReqToCallback: true  
    }, function (req, email, password, done) {
        log.console(email);
      User.findOne({'email': email}, function (err, user) {
        log.console(password)
        if (err) return done(null);
        if (user) return done(null, false, req.flash('signupMessage', '중복된 아이디입니다.'));

        const newUser = new User();
        newUser.email = email; 
        newUser.password = newUser.generateHash(password); 
        newUser.name = req.body.name;

        newUser.save(function (err) { 
          if (err) throw err;
          return done(null, newUser); 
        });
      })
    }));
    //login
    passport.use('local-signin', new LocalStrategy({
        usernameField: 'email',
        passwordField: 'password',
        passReqToCallback: true
    },function(req,email,password,done){
        User.findOne({'email': email}, function(err,user){
            if(err) return done(err);
            if(!user) return done(null,false,req.flash('signinMEssage','this userId is not existed'));
            //valid password
            if(!user.validPassword(password)) return done(null,false,req.flash('signinMessage','wrong password'));
            return done(null, user);
        });
    }));
}

app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var passport = require('passport');
var router = express.Router();
var path = require('path');
var mongoose = require('mongoose');
var session = require('express-session');
var flash = require('connect-flash');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var LocalStrategy = require('passport-local').Strategy;
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var authRouter = require('./routes/auth'); 

//Functions related to auth
//set db


var app = express();
mongoose.connect('mongodb://localhost/user');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log('Conneted mongoDB');
});

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(session({ 
  secret: 'secret', 
  resave: true, 
  saveUninitialized: true 
}));  
app.use(flash());   
app.use(passport.initialize());
app.use(passport.session());
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/', authRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});
require('./routes/db/passport')(passport);
module.exports = app;

I am trying to test my signup function in passport.js so i put post on auth.js, but I think it is not getting called and always send failureRequest. I put some console on function in passport.js to see weather it is getting called or not, but it is not printing any console log when it is post.

enter image description here

Aucun commentaire:

Enregistrer un commentaire