2017-08-09 4 views
0

J'essaie de sauvegarder un utilisateur et de l'enregistrer en même temps. J'ai des problèmes à faire les deux simultanément.
Mon schéma actuel:Création d'un utilisateur et authentification à l'aide de passport.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"); 

Ma forme actuelle:

<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> 

J'EXIGEANT express, un passeport, un passeport local, passeport local mangouste, corps-analyseur, mangouste, et mon schémas.

Mes app.js après c'est:

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"); 
    }); 
}); 

Le problème que j'ai est que lorsque je soumets, l'utilisateur enregistre le sel, hachage, nom d'utilisateur et met joueur à « true », mais ne sauvegarde pas lastName ou firstName et il suit avec une mauvaise requête (400). Je peux faire un User.Create et il enregistre tout (moins le hachage et le sel) et redirige bien. Je peux aussi définir le formulaire de sorte que "utilisateur [nom d'utilisateur]" et "utilisateur [mot de passe]" soient "nom d'utilisateur" et "mot de passe" et l'obtiennent tout sauf prénom et nom et redirigera correctement sans statut 400. J'ai essayé de changer les entrées par défaut pour "usernameField" et "passwordField", mais je n'ai pas eu de chance. J'ai essayé de regarder différents postes de SO et le plus proche que j'ai trouvé était une suggestion similaire pour changer les valeurs par défaut, alors peut-être que je me trompe. J'ai également essayé de rediriger vers des routes différentes et toujours pas de chance.

C'est le premier projet sur lequel j'ai travaillé qui ne soit pas un code-long et j'ai essayé d'être aussi précis que possible sur tout et j'ai lutté pendant huit heures. Merci pour toute aide!

Répondre

0

Vous devez spécifier les différents paramètres

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

Okay qui aide. Merci. –