当前位置: 首页 > 面试题库 >

Node.js + express.js + passport.js:在服务器重启之间保持身份验证

慕容兴贤
2023-03-14
问题内容

我使用password.js在我的nodejs +
express.js应用程序上处理身份验证。我设置了一个LocalStrategy以从mongodb吸引用户

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

这是我的应用设置:

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);
});

和会话序列化设置:

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 days
        store: MongoDBStore({
        db: mongoose.connection.db
    })
}));

编辑 其他问题:仅应建立一个连接(使用一项connexion有限的mongohq免费服务)

EDIT 2 解决方案(作为我的版本,我的声誉现在很低,无法回答我的问题

这是我最终发现的解决方案,使用猫鼬启动的连接

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');
        })
}));

问题答案:

有一个名为 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(
    // 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}
    )        
}));

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



 类似资料:
  • 问题内容: 我有一个在Rails和Backbone.js上运行的单页应用程序。我正在通过Redis使用Node.js将数据推送并同步到客户端。我正在尝试了解,保护和优化套接字通信。 使用console.log编写时,我看到一些日志行()正在重复(请参见下面的内容)。 有人能解释我为什么吗?通过我的代码实现,我是否不了解某些特定的Node.js行为? 这是我的Node.js代码: 这是我测试的方式,

  • 它总是导致带有错误消息的catch块 登录失败:未知的用户名或错误的密码。失败:未知的用户名或错误的密码。 我确信给定的密码是正确的。 如何使用给定的密码验证用户名?

  • 问题内容: 我已经安装并正在osx上运行一个node.js服务器。我已经释放了一个聊天模块,并且正在愉快地运行它。我更改了一些内容,需要重新启动服务器才能看到效果。 我只知道如何通过关闭终端窗口,然后重新对其进行操作,然后再次运行节点chatdemo.js来重新启动。 有什么方法可以重启而不关闭终端吗? 谢谢。 问题答案: 如果它仅在运行(不是守护程序),则使用。 如果是守护进程,则可以尝试: 凡

  • REST服务器可以配置为对客户端进行身份认证。启用此选项时,客户端必须在允许调用REST API之前向REST服务器进行身份认证。 选择一个认证策略 REST服务器使用开源Passport身份认证中间件。REST服务器的管理员必须选择Passport策略来认证客户端。可以选择多个Passport策略,允许REST服务器的客户端选择首选的身份认证机制。Passport包括广泛的策略(在写作时为300

  • 编辑: org.springframework.security日志: ***但是,如果我在获得有效身份验证后查看日志中的一些请求: 调试2022-01-17 12:31:03.945 IST“将SecurityContextHolder设置为SecurityContextImpl[Authentication=OAuth2AuthenticationToken[Principal=com..se

  • 我在AWS上托管了几个微服务(Springdge)。例如,让我们假设Service1和Service2是两个微服务。Service1是前端和移动应用程序访问的微服务。Service1调用Service2。Service2完全是内部的。 我已经设置了位于Service1前面的Amazon API网关。我使用cognito配置了身份验证(Oauth)。 这一切都在起作用。当从前端/应用程序调用时,请求