Node.js 如何在Passportjs节点中持久化登录?

Node.js 如何在Passportjs节点中持久化登录?,node.js,express,passport.js,passport-twitter,Node.js,Express,Passport.js,Passport Twitter,我正在使用passport库来处理用户的登录,但目前面临一个问题。当用户登录后,不久他们就会再次注销,这是一个糟糕的用户体验 我是否缺少一些可以让用户登录持久化的东西 下面是我的代码: Passport.js //装载我们需要的所有东西 var passport=需要(“passport”); var LocalStrategy=require('passport-local')。策略; var TwitterStrategy=require('passport-twitter')。策略;

我正在使用passport库来处理用户的登录,但目前面临一个问题。当用户登录后,不久他们就会再次注销,这是一个糟糕的用户体验

我是否缺少一些可以让用户登录持久化的东西

下面是我的代码:

Passport.js
//装载我们需要的所有东西
var passport=需要(“passport”);
var LocalStrategy=require('passport-local')。策略;
var TwitterStrategy=require('passport-twitter')。策略;
//包括用户模型
var User=require('../app/model/User');
//包括身份验证凭据
var configAuth=require('./auth');
需要('../app/model/upload');
module.exports=函数(passport){
//用于序列化会话的用户
passport.user(函数(user,done){
完成(null,user.id);
});
//用于反序列化用户
passport.deserializeUser(函数(id,完成){
findById(id,函数(err,User){
完成(错误,用户);
});
});
//登录代码(使用('local-login',新LocalStategy))
//注册代码(使用('local-signup',new LocalStategy))
//facebook代码(使用('facebook',新facebook策略))
// =========================================================================
//推特=================================================================
// =========================================================================
passport.use(新推特策略)({
consumerKey:configAuth.twitterAuth.consumerKey,
ConsumerCret:configAuth.twitterAuth.ConsumerCret,
callbackURL:configAuth.twitterAuth.callbackURL,
userProfileURL:“https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true",
includeEmail:true,
profileFields:['emails']
},
功能(令牌、令牌机密、配置文件、完成){
//使代码异步
//在我们从Twitter上取回所有数据之前,User.findOne不会启动
process.nextTick(函数(){
User.findOne({
'member.id':profile.id
},函数(错误,用户){
//如果出现错误,请停止所有操作并返回该错误
//ie连接到数据库时出错
如果(错误)
返回完成(err);
//如果找到用户,请将其登录
如果(用户){
return done(null,user);//找到用户,返回该用户
}否则{
//将电子邮件声明为数组
//var=[];
//如果没有用户,请创建它们
var newUser=newUser();
newUser.member.id=profile.id;
newUser.member.token=profile.token;
newUser.member.username=profile.username;
newUser.member.displayName=profile.displayName;
newUser.member.email=profile.emails[0]。值;
newUser.member.medium='Twitter';
newUser.member.picture=profile.\u json.profile\u image\u url.replace(“'u original','');
//将用户凭据保存到数据库中
newUser.save(函数(err){
如果(错误)
犯错误;
返回完成(null,newUser);
//res.cookie('username',newUser.twitter.username).send('Hello');
});
}
});
});
}));

};这里有两种不同的东西

如果用户在服务器重新启动后注销,则需要一个“存储”

如果用户在一段时间后自动登录,即使您没有重新启动服务器,也需要设置会话或cookie的到期日期

您可以使用
connect
中间件:

使用(connect.session({secret:'SUPER secret',cookie:{maxAge:86400000}))

这将使会话保持24小时有效(在此处设置您自己的号码)

快速会话
中间件:


两者都有一个
存储
概念。简而言之,它指定了细节将存储在哪里。如果它在内存中(不推荐),服务器重新启动后,您将丢失会话。

这将太多或“现成代码”,因为它将包括数据库连接和所有内容。我为您指出了正确的方向,他们的文档将帮助您。对于商店,您可以使用他们的示例。这是一个基于文件的数据库,所以不要在大型项目中使用它。谢谢你的回答。我已经在用了,而且效果很好。