2017-07-22 9 views
0

私は同様の質問を読んだが、解決策を見つけることができなかった。私server.jsファイルでExpress + PassportアプリでPOSTできない

./app/controllersで
var express   = require('express'); 
var app    = express(); 
var bodyParser  = require('body-parser'); 
var passport  = require('passport'); 
var cookieParser = require('cookie-parser'); 
var expressSession = require('express-session'); 
var passportHelp = require('./config/passport'); 
var flash   = require('connect-flash'); 

app.use(express.static(__dirname + '/public')); 
app.use(cookieParser()); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 
app.set('view engine', '.hbs'); 
app.set('views', path.join(__dirname, './app/views')) 
app.use(expressSession({ 
    secret: 'secret', 
    saveUninitialized: true, 
    resave: true 
})); 
passportHelp(passport); 
app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(flash()); 
app.use(require('./app/controllers')); 
app.listen(3000); 

var express = require('express'); 
var router = express.Router(); 
router.use(require('./signup')); 
module.exports = router; 

./controllers/signupで

var express = require('express'); 
var passport = require('passport'); 
var router = express.Router(); 
router.get('/signup', function(req, res) { 
    res.render('signup'); 
}); 
router.post('/signup', passport.authenticate('local-signup', { 
    successRedirect: '/profile', 
    failureRedirect: '/signup', 
    failureFlash: true, 
})); 
module.exports = router; 

最後に、./config/passportで

var LocalStrategy = require('passport-local').Strategy; 
var User   = require('../app/models/user'); 
module.exports = function(passport) { 
    passport.serializeUser(function(user, done) { 
     done(null, user.id); 
    }); 
    passport.deserializeUser(function(id, done) { 
     User.findById(id, function(err, user) { 
      done(err, user); 
     }); 
    }); 

passport.use('local-signup', new LocalStrategy({ 
    passReqToCallback : true 
    }, 
    function(req, username, password, done) { 
    console.log(req.body.username); 
    console.log(req.body.password); //successfully logs all of these 3 
    console.log(req.body.email); 
     process.nextTick(function() { 
     User.findOne({ 'username' : username }, function(err, user) {   
      if (err) { 
       return done(err);  
      }   
      if (user) { 
       return done(null, false, req.flash('signupMessage', 'That email is already taken.')); 
      } 
      else {      
       var newUser = new User; 
       //filling new user data here 
       newUser.save(function(err) { 
        if (err) 
         throw err; 
        return done(null, newUser); 
       }); 
      } 
     });  
    }); 
})); 

私は奇妙な動作に終わります。場合によってはPOSTに問題はありません。時にはcannot POST /signupが返されますが、結果はまだデータベースに保存されます。 server.jsファイルの一部の行を切り替えようとしましたが、結果は表示されません。私が読んだように、require passportcontroller/signupであるとき、それはserver.jsで '初期化された'同じ 'パスポート'オブジェクトでなければならないので、新鮮なpassportオブジェクトで作業することはできません。私は正しい?

答えて

0

誰かが同じ問題に直面している場合。 エラーが発生したのはデータベースに保存された理由は、私がその行にコメントしたことです:successRedirect

関連する問題