2017-01-12 11 views
0

Ниже приведен код, над которым я работаю, но я получаю ошибки во время выполнения. Пожалуйста, помогите мне в создании маршрутов для форм входа и регистрации, которые находятся на одной странице. Когда я пересылаю регистрационный бланк с этим кодом, я получаю сообщение об ошибке, которое говорит «Неверный запрос»Аутентификация паспорта в Nodejs

var express = require ('express'); 
var app = express(); 
var path= require('path'); 
var bodyParser = require('body-parser'); 
var mongoose = require("mongoose"); 
var nodemailer = require('nodemailer'); 
var transporter = nodemailer.createTransport(); 
var smtpTransport = require('nodemailer-smtp-transport'); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local'); 
var passportLocalMongoose = require('passport-local-mongoose'); 
var User = require('./models/user'); 


app.set('port', process.env.PORT || 3000); 
app.use(bodyParser.json()); // support json encoded bodies 
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies 

app.use(express.static(path.join(__dirname, 'public'))); 
app.set("view engine", "ejs"); 
app.use(require('express-session')({ 
    secret: 'Working on enroll Medicare', 
    resave: false, 
    saveUninitialized: false 
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 

passport.use(new LocalStrategy(User.authenticate())); 
passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 

mongoose.connect("mongodb://localhost/registration"); 
app.post('/login-register.html', function(req,res) 
{ 
      var username = req.body.usernameregister; 
      var email = req.body.emailregister; 
      var password1 = req.body.password1register; 
      var password2 = req.body.password2register; 
     password1, password2: password2} 
     User.register(new User({username: username, email: email}), password1, function(err, user){ 
      if(err){ 
      console.log(err); 
      return res.render('error'); 
      } 
      passport.authenticate('local')(req, res, function(){ 
       res.redirect("/secret"); 
      }); 
     }); 
}); 

Войти страницу

app.post("/login-register.html", passport.authenticate('local', { 
    succesRedirect: "/secret", 
    failureRedirect: "/error" 
}), function(req, res){ }); 

ответ

1

Я думаю, что вы можете иметь несколько проблем здесь. Вот несколько вещей, которые нужно проверить:

  • У вас есть passport.use(new LocalStrategy(User.authenticate()));. Я не знаю, что возвращает User.authenticate(), но он должен возвращать функцию с аргументами function(username, password, done) {...}
  • Похоже, вы используете email в качестве имени пользователя. Вам нужно добавить usernameField к вариантам стратегии: new LocalStrategy({usernameField: 'email'}, function(email, password, done){...})
  • Я также нашел, что это действительно полезно использовать пользовательский обратный вызов в функции passport.authenticate, чтобы увидеть, если произошли ошибка дает больше информации о проблеме: passport.authenticate('local', function(err, user, info) {console.log(err, user, info)})