J'ai trouvé le post suivant sur la façon dont deserializeUser est censé fonctionner: PassportJS serializeUser and deserializeUser execution flowComment appeler deserializeUser avec passeport
Cependant, lorsque je tente et envoyer un JSON au serveur qui contient la clé pour l'utilisateur, je ne peux pas appeler req .user pour trouver les détails de l'utilisateur.
Je ne sais pas comment vérifier ce qui se passe parce qu'il se passe beaucoup de choses sous le capot.
Est-ce que le passeport s'attend à ce que j'envoie un cookie à exprimer contenant la clé? Un nom spécifique pour le cookie ou le format? Faut-il que j'ai envoyé la clé au format JSON?
const express = require('express')
const app = express()
const mongoose = require('mongoose')
var cors = require('cors')
const bodyParser = require('body-parser')
var http = require('http')
var cookieParser = require('cookie-parser');
app.use(cookieParser('someSecret'));
var session = require('express-session');
app.use(session());
var flash=require("connect-flash");
app.use(flash());
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
session: true,
passReqToCallback: true
},
function(req, username, password, done){
registrationModel.findOne({username: username}, function(err, user){
if (err) { return done(err); }
if (!user){
console.log("Username incorrect")
return done(null, false, { message: 'Incorrect username.'});
}
if (user.password != password){
console.log("Password Incorrect")
return done(null, false, { message: 'Incorrect Password.'});
} else {
console.log("Returning good stuff")
console.log(user)
return done(null, user);
}
});
}
));
//Needed for authenticating the session and initializing passport
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
console.log("Serializing User")
console.log(user.id)
console.log("Should be serialized")
done(null, user.id);
});
passport.deserializeUser(function(id, done){
users.User.findById(id, function(err, User) {
console.log('attempting to deserialize user')
console.log(user)
console.log('--------------')
if (User){
done(err, User);
} else {
done(err, null);
}
})
})
app.post('/api/authenticate', passport.authenticate('local'),
function(req, res){
const individualIWant = jsonQuery('req.sessionStore.sessions')
res.cookie('FreeUp', req.session.passport.user)
var cookie = JSON.stringify(req.session.passport.user)
res.send({'name': 'FreeUp', 'value': cookie})
})
Je peux voir un cookie dans le navigateur: nom: « FreeUp » valeur: « » 59c4cf4ecb364a000f23a707 « »
La valeur est l'ID de base de données pour l'objet et non la clé de la sérialisé objet. Je comprends que j'ai besoin d'accéder à la clé de l'objet sérialisé en utilisant res.req.sessionID et de renvoyer cela à la place.
Cependant, le point reste, je ne sais pas s'il faut le renvoyer en tant que fichier json ou un cookie. Cela semble être une bibliothèque si complexe à utiliser.
Quel est le format que le passeport m'attend à utiliser lors de l'envoi des données depuis Ember?
Merci!
Pouvez-vous montrer comment vous avez configuré votre application? Les réponses à vos questions en dépendent grandement. – Paul