2016-07-25 14 views
0

はこの問題を2日間抱えています:)いくつかの助けに感謝します。私はpassportjs + sqliteの+ sequelizeと急行の認証を構築しようとしているpassportjs local-strategy cant route

1)私はpassport.sessionの下にルートを置くとき)

2を動作しませんapp.use(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) 
        } 

       }) 
     }) 
    ) 

}; 
をGETカント

ルートファイル

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 

} 私を助けてください!ありがとう!

答えて

1

.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

P.S.をあなたは 'User.findById(id)'を実行してユーザを得ることができます –

+0

返事をありがとう!しかし私はまだGET/adminで500を得ています – Skaplun

+0

nodejsコンソールにメッセージはありますか? –

関連する問題