快递会议不保存

问题描述 投票:0回答:1

我正在为Shopify的小应用程序编写一个简单的服务器。获取我的应用程序的令牌后,我想将其保存到会话,所以我使用express-session。但它没有用。

我在下面的代码中尝试了this解决方案。

github上的人也有这个问题:

https://github.com/expressjs/session/issues/371

https://github.com/expressjs/session/issues/633

这是我的配置:

app.use(session({ 
    secret: 'new app',
    resave: false,
    saveUninitialized: true,
    cookie: {maxAge: 24*60*60*1000}
}))

这是获取令牌并保存令牌的代码:

request.post(accessTokenRequestUrl, { json: accessTokenPayload })
        .then((accessTokenResponse) => {
            const accessToken = accessTokenResponse.access_token;
            const shopRequestUrl = 'https://' + shop + '/admin/themes.json';
            const shopRequestHeaders = {
                'X-Shopify-Access-Token': accessToken,
            };

            request.get(shopRequestUrl, {headers: shopRequestHeaders})
            .then((shopRes) => {
                let shopObj = JSON.parse(shopRes)
                let themeId = shopObj.themes[0].id;


                req.session.token = accessToken;
                req.session.save();
                console.log(req.session);

                res.json({
                    themeId: themeId,
                    token: accessToken
                })
            })

        })

我的console.log之后。我说我在会话对象中有令牌:

Session {
  cookie:
   { path: '/',
     _expires: 2019-02-27T09:01:18.638Z,
     originalMaxAge: 86400000,
     httpOnly: true },
  token: '1354658af88b9417d3c268dd3c22eae4' }

但是在另一条路线上:

app.get('/shopify/callback/images', (req, res) => {
    console.log(req.session);
    res.send(req.session.token);
})

我懂了

Session {
  cookie:
   { path: '/',
     _expires: 2019-02-27T09:03:56.280Z,
     originalMaxAge: 86400000,
     httpOnly: true } }

非常感谢!

node.js session shopify express-session
1个回答
0
投票

首先,如果Promise中存在任何异步作业,Promise应始终返回Promise。

return request.get(shopRequestUrl, {headers: shopRequestHeaders})

此外,始终在Promises链中添加.catch()是最佳做法。

但真正的问题是req.session.save()是异步的并且需要一个回调函数。

req.session.token = accessToken;
req.session.save(() => {
  console.log(req.session);

  return res.json({
    themeId : themeId,
    token   : accessToken,
  });
});
© www.soinside.com 2019 - 2024. All rights reserved.