【发布时间】:2017-08-16 20:03:05
【问题描述】:
我可以使用本地护照登录。我想测试护照创建的会话是否有效。我正在从 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 中没有任何内容。
我这样做是因为我认为:
- 用户登录后,Passportjs 创建的会话一直持续到它被注销销毁。
- 用户登录后,无需创建cookie并将其发送给Angular。 Passport 会自动执行此操作。
- 当 Angular 发送任何请求时,节点可以访问
req的会话并使用它自己的会话进行验证。
我对所有这 3 点都正确吗?
非常感谢!
编辑 我的猫鼬模式:
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
添加在passport session 之前放置express 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);
});
}
));
【问题讨论】:
-
可能是你的护照配置的问题,把你护照代码的sn-p。
-
添加到 OP。请检查。谢谢。
标签: angularjs node.js session passport.js passport-local