passportjs本地策略不能获得路线

passportjs本地策略不能获得路线

问题描述:

已经与这个问题摔跤2天了:)现在感谢一些帮助。passportjs本地策略不能获得路线

我试图建立与passportjs +源码+ sequelize快递认证,

1),当我把上面app.use(passport.session())登录路线行不通

2)当我把下面passport.session路线应用程序不能得到的路线

App.js 



    --- normal includes 
app.use(cookieParser()); 
app.use(session({ 
    secret: 'ilovescotchscotchyscotchscotch', 
    resave: true, 
    saveUninitialized: true 
})); 

var passport = require('passport'); 

app.use(passport.initialize()); 

app.use(passport.session()); 

var router = require('./routes/index')(passport); 

app.use('/', router); 

var initPassport = require('./passp.js'); 
initPassport(passport); 

护照文件

// load all the things we need 
var LocalStrategy = require('passport-local').Strategy; 

// expose this function to our app using module.exports 
module.exports = function(passport) { 
    var User = require('./dbCon.js'); 
    passport.serializeUser(function(user, done) { 
     done(null, user.dataValues.id); 
    }); 

// used to deserialize the user 
    passport.deserializeUser(function(id, done) { 
     User.findOne({where : {id : id}}).then(function(user) { 
      done(null, user); 
     }).catch(function(err){ 
      console.log(err) 
     }); 
    }); 


    passport.use('local-signup', new LocalStrategy({ 
      // by default, local strategy uses username and password, we will override with email 
      usernameField : 'email', 
      passwordField : 'password', 
      passReqToCallback : true // allows us to pass back the entire request to the callback 
     }, 
     function(req, email, password, done) { 
      User.findOne({where : {username : email } }) 
       .then(function(user){ 
        if(user === null) { 
         User.create({ 
          username : email, 
          password : password 
         }).then(function(user){ 
          done(null, user); 
         }).catch(function(err){ 
          console.log(err) 
         }) 
        } 
        else{ 
         done(null, false); 
        } 

       }).catch(function(err){ 
       console.log(err) 
      }) 

     } 
    )) 

    passport.use('local-login', new LocalStrategy({ 
      // by default, local strategy uses username and password, we will override with email 
      usernameField : 'email', 
      passwordField : 'password', 
      passReqToCallback : true // allows us to pass back the entire request to the callback 
     }, 
     function(req, email, password, done) { // callback with email and password from our form 
      return User.findOne({where : {username : email } }) 
       .then(function (user) { 
        if(user === null) done(null, true) 
        if(user.dataValues.password === password) done(null, user) 
        else{ 
         done(null, true) 
        } 

       }) 
     }) 
    ) 

}; 

路由文件

module.exports = function(passport){ 

router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

router.get('/error', function(req, res, next) { 
    res.render('error', { title: 'Express' }); 
}); 

router.get('/admin', function(req, res, next) { 
    res.render('admin', { title: 'Express' }); 
}); 


router.post('/signup', function(req, res, next) { 
    passport.authenticate('local-signup', function(err, user, info) { 
     if (err) { return next(err); } 
     // Redirect if it fails 
     if (!user) { return res.redirect('/'); } 
     req.logIn(user, function(err) { 
      if (err) { return next(err); } 
      // Redirect if it succeeds 
      return res.render('admin'); 
     }); 
    })(req, res, next); 
}); 

router.post('/login', function(req, res, next) { 
    passport.authenticate('local-login', function(err, user, info) { 
     if (err) { return next(err); } 
     // Redirect if it fails 
     if (!user) { return res.redirect('/'); } 
     req.logIn(user, function(err) { 
      if (err) { return next(err); } 
      // Redirect if it succeeds 
      return res.render('admin'); 
     }); 
    })(req, res, next); 
}); 

return router 

} 请帮帮我!谢谢!

.then()免费获赠结果作为第一个参数,而不是error

试试:

// used to deserialize the user 
passport.deserializeUser(function(id, done) { 
    User.findOne({where : {id : id}}) 
    .then(function(user) { 
     done(null, user); 
    }) 
    .catch(function(err){ 
     done(err, null); 
    }); 
}); 
+0

附:你可以做'User.findById(id)'来获取用户 –

+0

感谢您的回复!但我仍然获得500 GET/admin – Skaplun

+0

nodejs控制台上是否有任何消息? –