2012-11-08 5 views
5

Je veux générer automatiquement des comptes utilisateur en générant un nom d'utilisateur et un mot de passe aléatoires, puis l'utilisateur est automatiquement connecté (l'utilisateur ne connaît pas son nom d'utilisateur/mot de passe, son navigateur stocke simplement le cookie de session). Le passeport fonctionne comme middleware, alors comment puis-je authentifier l'utilisateur que je viens de générer? Ou, serait-il préférable de rediriger en quelque sorte vers mon itinéraire app.post('/login') et d'envoyer ces variables? (Mais en envoyant ceux-ci au navigateur, juste pour être renvoyé au serveur ne semble pas très sécurisé ou efficace).Comment authentifier un serveur côté utilisateur avec Passport JS?

app.get('/signup', function(req, res) { 
if(req.isAuthenticated()) { res.redirect('/'); } 
else { 
    var today = new Date(); 
    var weekDate = new Date(); 
    weekDate.setDate(today.getDate() + 7); 

    var key1 = Math.random().toString(); 
    var key2 = Math.random().toString(); 
    var hash1 = crypto.createHmac('sha1', key1).update(today.valueOf().toString()).digest('hex'); 
    var hash2 = crypto.createHmac('sha1', key2).update(weekDate.valueOf().toString()).digest('hex'); 

    var newUser = new models.User({ 
     username: hash1, 
     password: hash2, 
     signupDate: today, 
     accountStatus: 0, 
     expirationDate: weekDate, 
    }); 

    newUser.save(function(err) { 
     if(err) {} 
     console.log("New user created."); 

     //HOW CAN I PASS USERNAME AND PASSWORD ARGUMENTS??? 
     passport.authenticate('local')(); 
     res.redirect('/login'); 
    }) 
} 
}); 

Répondre

6

Remplacez votre appel à passport.authenticate('local')(); avec

req.logIn(user, function(err) { 
    if (err) { return next(err); } 
    //copied from the docs, you might want to send the user somewhere else ;) 
    return res.redirect('/users/' + user.username); 
}); 

et laissez-moi savoir comment ça se passe.

+0

Merci beaucoup! J'aimerais que cela soit plus visible sur la documentation de Passport. –

+1

Je suis d'accord, c'est assez caché et je me souviens aussi avoir du mal à le trouver. – rdrey

1

la réponse de rdrey a été très utile. Un détail qui pourrait être évident pour la plupart mais qui n'était pas pour moi est que le modèle .save() se trompe et l'enregistrement dans le rappel. Donc, le modèle dans son intégralité est

newuser.save(function(err,user) { 
req.logIn(user, function(err) { 
if (err) { return next(err); } 
//copied from the docs, you might want to send the user somewhere else ;) 
return res.redirect('/users/' + user.username); 
}); 
Questions connexes