2016-11-09 6 views
0

Ich habe Passjs und Passport-local-mongoose für die Benutzeranmeldung verwendet. Dies ist mein CodeSchlechte Anfrage in Nodejs

var express   =require("express"), 
    app    =express(), 
    bodyParser  =require("body-parser"), 
    passport  =require("passport"), 
    LocalStrategy =require("passport-local"), 
    User   =require("./models/user"), 
    mongoose  =require("mongoose"), 
    exphbs  =require("express-handlebars"); 

mongoose.connect("mongodb://localhost/lone"); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended:true})); 
var hbs = exphbs.create({ 
    defaultLayout: 'main', 


    partialsDir: [ 

     'views/partials/' 
    ] 
}); 
app.use(express.static(__dirname +"/public")) 

app.engine('handlebars', hbs.engine); 
app.set("view engine", "handlebars"); 

app.use(require("express-session")({ 
    secret:"You are beautiful", 
    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()); 
app.use(function (req,res,next) { 
    res.locals.currentUser=req.user; 
    next(); 

}); 
//Auth Routes 
app.get("/signup",function(req,res){ 
    res.render("signup"); 
}); 
app.get("/",function(req,res){ 
res.render("home"); 
}); 
app.post("/signup",function(req,res,next){ 
    var newUser= new User({username: req.body.userName,name:req.body.firstName,email:req.body.email}); 
    User.register(newUser, req.body.password, function(err,user){ 
     if (err){ 
      console.log(err); 
      res.redirect("/login") 
      return next(); 
     } 
     passport.authenticate("local")(req,res,function(){ 

      res.redirect("/"); 
      return next(); 
     }); 
    }) 
}); 
app.get("/login",function(req,res){ 
    res.render("login"); 
}); 
app.get("/logout",function(req,res){ 
    req.logout(); 
    res.redirect("/"); 
}); 
app.get("/",function (req,res) { 
    res.render("home"); 

}); 
app.listen(3000,function(){ 
    console.log("started"); 

}); 

Wenn ich die Registrierung Taste auf Senden klicken ich eine Fehlermeldung erhalten, die schlecht Anfrage sagt. und dies ist die Botschaft, die ich in meiner Konsole bekommen {[UserExistsError: Ein Benutzer mit dem angegebenen Benutzernamen ist bereits registriert] Name: ‚UserExistsError‘, Meldung: ‚Ein Benutzer mit dem angegebenen Benutzernamen ist bereits registriert‘}

+0

Wahrscheinlich nicht verwandt mit Ihrem Fehler, aber rufen Sie nicht 'next()' nach 'res.redirect()'. Sobald Sie die Antwort gesendet haben, rufen Sie 'next()' nicht auf, weil Sie nicht möchten, dass andere Handler diese Anfrage sehen. – jfriend00

+0

... existiert der Benutzer bereits in Ihrer Datenbank? –

+0

Nein, der Benutzer existiert nicht. Aber ich denke, das Problem ist mit der Registermethode. Wenn ich das Programm starte, wird es in der Registermethode zweimal durchlaufen. –

Antwort

0

Nichts ist falsch mit Ihrem Code.

Sie versuchen, einen Benutzer mit einem bereits vergebenen Benutzernamen anzumelden. Sie können dies anmutiger wie folgt behandeln:

+0

Ich habe ein Debugging für diese App. Das Problem scheint in der Registermethode zu liegen. Die Programmschleife zweimal, beim ersten Mal geht es nicht in die Callback-Funktion, aber in der zweiten Runde wird es in die Funktion gelangen und den Benutzer als existent erkennen. –