2017-08-09 1 views
0

Ich versuche, einen Benutzer zu speichern und gleichzeitig zu registrieren. Ich habe Probleme, beides gleichzeitig zu tun.
Mein aktuelles Schema:Erstellen eines Benutzers und Authentifizierung mit pass.js

const userSchema = new mongoose.Schema({ 
username: String, 
password: String, 
firstName: String, 
lastName: String, 
player: { 
    type: Boolean, 
    default: true 
    } 
}); 
userSchema.plugin(passportLocalMongoose); 
module.exports = (User, "userSchema"); 

Meine aktuelle Form:

<form action="/player" method="POST"> 
    <input type="text" name="user[username]" placeholder="username"> 
    <input type="password" name ="user[password]" placeholder="password"> 
    <input type="text" name="user[firstName]" placeholder="First Name"> 
    <input type="text" name="user[lastName]" placeholder="Last Name"> 
    <button>Submit</button> 
</form> 

ich in einem ausdrücklichen, Reisepass bin erforderlich, Pass-local, Pass-local-Mungo, Körper-Parser, Mungo, und meine Schemata.

Mein app.js danach ist:

mongoose.connect(database); 
app.use(bodyParser.urlencoded({extended: true})); 
app.use(require("express-session")({ 
    secret: "Generic Secret Password", 
    resave: false, 
    saveUninitialized: false 
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
passport.use(new LocalStrategy(User.authenticate())); 
passport.serializeUser(User.serialUser()); 
passport.deserializeUser(User.deserializeUser()); 

//route 
app.post("/player", function(req, res){ 
var newUser = new User({ username: req.body.user.email }); 
User.register(newUser, req.body.user.password, function(err, user){ 
    if(err){ 
     console.log(err); 
     return res.render("new"); 
    } 
    passport.authenticate("local")(req, res, function(){ 
     res.redirect("/player"); 
    }); 
}); 

Das Problem, das ich habe, ist, dass, wenn ich einreichen, spart der Anwender das Salz, Hash, den Benutzernamen und setzt Spieler auf „true“, aber es speichert lastName oder firstName nicht und es folgt mit einer ungültigen Anforderung (400). Ich kann ein User.Create machen und es speichert alles (minus Hash und Salz) und leitet gut um. Ich kann das Formular auch so einrichten, dass "user [Benutzername]" und "user [password]" "username" und "password" sind und alles außer firstName und lastName speichern und es ohne einen 400-Status richtig umleiten wird. Ich habe versucht, die Standardeingaben für "usernameField" und "passwordField" zu ändern, aber ich hatte kein Glück. Ich habe versucht, verschiedene SO-Posts zu sehen, und der nächste, den ich fand, war ein ähnlicher Vorschlag, die Standardeinstellungen zu ändern, also mache ich es vielleicht falsch. Ich habe auch versucht, auf andere Routen umzuleiten und immer noch kein Glück.

Dies ist das erste Projekt, an dem ich gearbeitet habe, das ist kein Code-Along und ich habe versucht, so spezifisch wie möglich zu sein und ich habe seit acht Stunden hart gekämpft. Danke für jede Hilfe!

Antwort

0

Sie müssen die verschiedenen Parameter angeben

var newUser = new User({ username: req.body.user.email, 
         firstName: req.body.user.firstName, 
         lastName: req.body.user.lastName}); 
+0

Ok, das hilft. Vielen Dank. –

Verwandte Themen