Passport.js ne passe pas à l'utilisateur de demander au req.login()
Mon passport.js la configuration va comme suit:
const Local = require("passport-local").Strategy;
const USMODEL = require("../models/user.js");
passport.serializeUser(function(user, done) {
console.log("SERIALIZING USER");
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
console.log("DESUSER", id);
var US = mongoose.model("RegUser", USMODEL);
US.findById(id, function(err, user) {
done(err, id);
});
});
passport.use("local-login", new Local({
usernameField: "email",
passwordField: "password",
passReqToCallback: true
},function(req, email, password, done) {
var US = mongoose.model("RegUser", USMODEL);
US.findOne({"email": email}, function(err, user){
if(err) throw err;
if(!user) return done(null, false);
if(!user.validPassword(password)) {
console.log("password not valid");
return done(null, false);
}
return done(null, user);
});
}));
Je vais changer la mangouste modèle au sein de chaque fonction, car je jongle avec plusieurs collections à la fois et j'aime avoir le contrôle complet de ce qui se passe.
Mon router.js fichier est le suivant des chemins qui font usage du passeport middleware:
app.get("/user/login", function(req, res) {
res.render("signin");
});
app.post('/user/login', function (req, res){
passport.authenticate('local-login', function(err, user, info){
if (err) return res.redirect("/");
if (!user) return res.redirect('/');
else {
req.login(user, function(err) {
if (err) return next(err);
console.log("Request Login supossedly successful.");
return res.redirect('/admin/filter');
});
}
})(req, res);
});
Qui, lors de l'authentification réussie, redirige vers /admin/filtre dans le même routeur qui va comme si.
app.get("/admin/filter", isLoggedIn, function(req, res){
//rendering stuff here
});
Maintenant, l'admin/filtre demande va au-delà d'un middleware appelé isLoggedIn
qui, en théorie, protège mes points de terminaison. Il va comme ceci:
function isLoggedIn(req, res, next) {
console.log("This is the authentication middleware, is req authenticated?");
console.log(req.isAuthenticated());
console.log("Does req.user exist?")
console.log(req.user);
return next();
}
Maintenant, vous attendez que parce que j'ai appelé req.connexion et je me suis redirigé vers mon point de terminaison de choix, la demande devra être authentifié. Ce n'est pas le cas.
Request Login supossedly successful.
This is the authentication middleware, is req authenticated?
false
Does req.user exist?
undefined
Je n'arrive pas à trouver la source de mon problème. Tout vérifie, que la stratégie est évoquée, ainsi que la fonction de rappel et req.login
qui rendrait, en théorie, un req.user
objet avec les données qu'il contient. Une chose étrange que j'ai observé, c'est que je ne vois pas le passport.deserializeUser()
méthode dans l'action. Jamais. Mais qui pourrait être en rapport avec le problème. Le passeport est certainement l'aide de ma stratégie et le rendu d'un objet utilisateur, mais de toute façon ce même objet n'est pas d'aller dans la demande. Avez-vous une suggestion ou une idée de ce qui se passe?
require('passport')
ainsi? ou est passport-local
en prenant soin de que - j'ai installé passeport à partir de zéro et avaient le même problème à un moment, essayant de se rappeler quel était le problème.essayez de mettre
req.login(user...
dans votre passport.js fichier dans la fonction de rappel à la finouais @ewizard passeport local nécessite l'utilisation de passeport qu'il comprend la stratégie.
OriginalL'auteur Eduardo de Luna | 2014-06-11
Vous devez vous connecter pour publier un commentaire.
J'ai résolu le problème par jongler avec le tutoriel, j'ai commencé lorsque j'ai d'abord appris à utiliser le Passeport de middleware. En fait, j'ai fait la configuration de mal: Mon code comme ceci dans le fichier du serveur:
quand il aurait dû être présent:
Soit j'ai raté la partie de la documentation où il est précisé que la configuration doit venir avant l'initialisation ou c'est tout simplement qu'une banalité de le faire remarquer. De toute façon, j'ai résolu mon problème.
OriginalL'auteur Eduardo de Luna