【问题标题】:Express-Session working fine on REST-client (VS Studio extension) but not in React siteExpress-Session 在 REST 客户端(VS Studio 扩展)上运行良好,但在 React 站点中却不行
【发布时间】:2022-01-02 10:09:56
【问题描述】:

基本上,如果我在一个路由上声明一个会话变量,我就不能在另一个路由中访问它(未定义)。

这是我的中间件:

app.use(cors({
 origin: ["http://localhost:3000"], methods: ["GET", "POST"] })); 
app.use(session({ 
 secret: process.env.SESSION_SECRET, 
 resave: false, saveUninitialized: false 
 }));

这是我的 /log-in 路线:

router.post('/api/users/auth/log-in/', async (req, res) => {
 // ... user authentication logic, here 'authenticated' boolean is defined 
 req.session.authenticated = authenticated; 
 req.session.save(); 
 if (authenticated) req.session.user = req.body.username; 
 res.json({"success": true, "authenticated": authenticated}); 
});

如果我在这条路由中记录会话变量,它工作得很好。

但是,在另一个路由中,当使用req.session.authenticated 访问时,变量返回一个undefined

我确定我缺少一些东西,但我无法让它工作。任何帮助表示赞赏!

澄清一下,如果我从 REST 客户端执行所有这些操作(登录并检查我是否已通过身份验证),它就可以正常工作。

【问题讨论】:

    标签: javascript node.js express session express-session


    【解决方案1】:

    原来我错过了每次获取的凭据处理,所以没有发送 cookie

    credentials: 'include' 添加到每个获取请求中解决了它。

    【讨论】:

      【解决方案2】:

      如果它通过您的 REST 客户端而不是通过应用程序正常工作,则可能意味着 cookie 没有被发送。您是否检查了开发者工具网络选项卡中的请求?

      只是对您的代码的一个小注释:

      // this has no impact because after this route completes, req is destroyed. 
      // It is the express-session middleware that will pickup the cookie 
      // and populate the req.session object for incoming each request.
      if (authenticated) req.session.user = req.body.username; 
      

      【讨论】:

      • 是的,我似乎在请求中找不到 cookie
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 2013-09-22
      相关资源
      最近更新 更多