Node.js + express.js + passport.js:在服务器重新启动之间保持身份验证 [英] Node.js + express.js + passport.js : stay authenticated between server restart

查看:116
本文介绍了Node.js + express.js + passport.js:在服务器重新启动之间保持身份验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用passport.js处理我的nodejs + express.js应用程序的验证。我设置了一个LocalStrategy以从mongodb中获取用户



我的问题是,当我重新启动节点服务器时,用户必须重新进行身份验证。这是一个问题,因为我正在积极开发它,不要在每次重新启动时不要登录(+我使用节点主管)



这是我的应用程序设置:

  app.configure(function(){
app.use('/ static' static(__ dirname +'/ static'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use .cookieParser());
app.use(express.session({secret:'something'}));
app.use(passport.initialize());
app.use (passport.session());
app.use(app.router);
});

会话序列化设置:

  passport.serializeUser(function(user,done){
done(null,user.email);
});

passport.deserializeUser(function(email,done){
User.findOne({email:email},function(err,user){
done(err,user) ;
});
});

我尝试了在博客上给出的解决方案(删除链接,因为它不再存在)使用connect-mongodb没有成功

  app.use(express.session({
secret:'something else',
cookie:{maxAge:60000 * 60 * 24 * 30},// 30天
存储:MongoDBStore({
db:mongoose.connection.db
})
}));

编辑附加问题:只能使用一个连接(使用一个连接限制蒙古免费服务)



EDIT 2 解决方案(作为一个版本,因为我的声誉低到现在回答我的问题

这是我终于找到的解决方案,使用mongoose启动连接

 应用程序$(
secret:'awesome unicorns',
maxAge:new Date(Date.now()+ 3600000),
store:new MongoStore(
{db:mongoose.connection.db},
function(err){
console.log(err ||'connect-mongodb setup ok');
})
} ));


解决方案

有一个名为 connect-mongo ,完全符合您的需要 - 在mongodb中持续会话数据

使用示例(重复使用 mongoose 打开的连接):

  var session = require('express-session'); 
var MongoStore = require('connect-mongo')(session);
var mongoose = require('mongoose');
mongoose.connect('mongodb:// localhost / sess');
app.use(express.session({
secret:'secret',
maxAge:new Date(Date.now()+ 3600000),
store:new MongoStore
//以下代码行不支持
//与connect-mongo版本1.2.1(2016-06-20)。
// {db:mongoose.connection。 db},
// function(err){
// console.log(err ||'connect-mongodb setup ok');
//}
{mongooseConnection: mongoose.connection}

}));

您可以在这里阅读更多信息: https://github.com/kcbanner/connect-mongo


I use passport.js to handle auth on my nodejs + express.js application. I setup a LocalStrategy to take users from mongodb

My problems is that users have to re-authenticate when I restart my node server. This is a problem as I am actively developing it and don't wan't to login at every restart... (+ I use node supervisor)

Here is my app setup :

app.configure(function(){
    app.use('/static', express.static(__dirname + '/static'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(express.session({secret:'something'}));
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(app.router);
});

And session serializing setup :

passport.serializeUser(function(user, done) {
    done(null, user.email);
});

passport.deserializeUser(function(email, done) {
    User.findOne({email:email}, function(err, user) {
        done(err, user);
    });
});

I tried the solution given on a blog (removed the link as it does not exist any more) using connect-mongodb without success

app.use(express.session({
    secret:'something else',
    cookie: {maxAge: 60000 * 60 * 24 * 30}, // 30 days
        store: MongoDBStore({
        db: mongoose.connection.db
    })
}));

EDIT additional problem : only one connection should be made (use of one connexion limited mongohq free service)

EDIT 2 solution (as an edition as I my reputation is to low to answer my question by now

Here is the solution I finally found, using mongoose initiated connection

app.use(express.session({
    secret:'awesome unicorns',
    maxAge: new Date(Date.now() + 3600000),
    store: new MongoStore(
        {db:mongoose.connection.db},
        function(err){
            console.log(err || 'connect-mongodb setup ok');
        })
}));

解决方案

There's an opensource called connect-mongo that does exactly what you need - persists the session data in mongodb

usage example (with a reuse of mongoose opened connection) :

var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/sess');
app.use(express.session({
    secret:'secret',
    maxAge: new Date(Date.now() + 3600000),
    store: new MongoStore(
    // Following lines of code doesn't work
    // with the connect-mongo version 1.2.1(2016-06-20).
    //    {db:mongoose.connection.db},
    //    function(err){
    //        console.log(err || 'connect-mongodb setup ok');
    //   }
    {mongooseConnection:mongoose.connection}
    )        
}));

you can read more about it here: https://github.com/kcbanner/connect-mongo

这篇关于Node.js + express.js + passport.js:在服务器重新启动之间保持身份验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆