Javascript Passport.js无状态

Javascript Passport.js无状态,javascript,node.js,passport.js,Javascript,Node.js,Passport.js,我正在使用Passport.js本地策略来处理我应用程序中的身份验证。我还使用Nodemon在进行更改时自动刷新服务器 问题是,每当我进行更改时,我都必须再次登录到应用程序。目前,这只是一种开发,但同样的概念也适用于处理请求的多个服务器(例如EC2负载平衡器)。所以我的问题是,如何在保持用户状态的同时使Passport.js成为无状态 似乎必须有一种方法来跨服务器保留状态和/或重新启动服务器。您有两种选择: 使用持久会话存储,例如,或 完全不要使用会话,而是使用JSON Web标记(也称为JWT

我正在使用Passport.js本地策略来处理我应用程序中的身份验证。我还使用Nodemon在进行更改时自动刷新服务器

问题是,每当我进行更改时,我都必须再次登录到应用程序。目前,这只是一种开发,但同样的概念也适用于处理请求的多个服务器(例如EC2负载平衡器)。所以我的问题是,如何在保持用户状态的同时使Passport.js成为无状态

似乎必须有一种方法来跨服务器保留状态和/或重新启动服务器。

您有两种选择:

  • 使用持久会话存储,例如,或
  • 完全不要使用会话,而是使用JSON Web标记(也称为JWT)
  • 第一个选项需要较少的设置,如果您已经有一个共享数据库,只需实例化存储并将其传递给您的应用程序,例如:

    const session = require('express-session');
    const MongoStore = require('connect-mongo')(session);
    
    app.use(session({
        secret: 'foo',
        store: new MongoStore(options)
    }));
    

    第二种选择需要一种不同的Passport策略,比如完全抛弃Passport并直接在自定义中间件中使用。

    为什么这个应用程序必须是无状态的?你可以传播州信息,如果这是你担心的-我不太明白它如何给你带来好处。只是想帮助您避免。在生产中,我计划使用EC2负载平衡器,因此基本上每个请求都使用不同的服务器,因此我需要确保用户获得授权,即使登录请求发生在单独的服务器上。我不希望用户每次都需要登录才能请求每个新服务器。然后在开发过程中,每当我做出更改,Nodemon重新启动服务器以重新登录时,这都会成为一种痛苦。我可能完全错了,但似乎几乎相同的解决方案可以解决这两个问题。将身份验证相关数据存储在redis服务器上。所以,服务器重启不会刷新您的身份验证数据,在redis服务器上缓存会快得多。非常详细。非常感谢。