我可以使用本地护照登录。我想测试护照创建的会话是否有效。我从Angular登录。当用户登录时,我不会创建任何手动cookie,但会看到创建了connect.sid
cookie。现在从Angular我发送另一个req
:
$scope.test = function(){
$http.get('\test').then(function(response){
if(response){
console.log(response);
} else {
console.log("Nothing Returned!");
}
});
}
在节点中:
app.use(session({
secret: 'mysecret',
resave: true,
saveUninitialized: true
}));
//Passport Init
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
app.get('\test', function(req, res){
//Tried the following (one at a time) :
var user = req.user;
var user = req[user];
var user = req["user"];
var user = req.session;
console.log(user);
res.send(user);
});
以上都不奏效。我得到res代码200,但在Angular的response.data
中没有,在节点控制台的undefined
中没有任何内容。
我这样做是因为我认为:
req
的会话并使用它自己的会话进行验证。我对所有这三点都是正确的吗?
非常感谢!
修改 我的猫鼬模式:
var UserSchema = mongoose.Schema({
id : {type:String, default:"abc123"},
username: {type:String, index: true},
password: String,
email: {type:String, unique:true}
});
module.exports = mongoose.model('User', UserSchema);
编辑2
添加在express session
passport session
时获得的输出
编辑3 我的策略:
passport.use(new LocalStrategy(
function(username, password, done){
User.findOne({username: username}, function(err, doc){
if(err) {
// console.log(err);
return done(err);
}
return done(null, doc);
});
}
));
答案 0 :(得分:1)
您需要更改订单,在“护照会话”之前加上“快速会议”。它应该以这种方式工作:
app.use(session({
secret: 'mysecret',
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
答案 1 :(得分:0)
您是否正在调用passport.initialize()和passport.session()? passport.session是读取cookie并将用户存储在req对象中的调用。
查看此答案以获取更多详细信息:What does passport.session() middleware do?