javascript - Express js redirect with cookie, cookie not present

标签 javascript express heroku cookies

所以我已经使用 Passport-js 实现了 facebook 登录。我还实现了 Cookie 策略以使用良好的 ole 用户名/密码登录。 我的设置是 Express-js 后端和 React 前端。后端和前端运行在不同的服务器和域(backend-client.com,frontend-client.com)上。

一切在本地主机上都像魅力一样,但在舞台和生产环境中却不是。不知道这是否重要,但我正在使用 Heroku 来托管我的应用程序。

问题:

当 facebook 身份验证完成后,Express 服务器将用户重定向到前端应用程序。 cookie 是一个包含用户信息的 JWT,用于检查用户是否登录。

const cookieSettings = {
    domain: process.env.COOKIE_DOMAIN,
    secure : (process.env.APP_MODE === 'local' ? false  : true),
    httpOnly : true,
};

const cookieMaxAge = {
    maxAge : 14 * 24 * 60 * 60 * 1000 // 14 days, 24h, 60 min, 60 sec * miliseconds
}

router.get('/auth/facebook/', passport.authenticate('facebook'));
router.get('/auth/facebook/callback', function(req, res, next) {
    passport.authenticate('facebook', async function (err, profile, info) {
        if (err || !profile) {
            res.redirect(`${process.env.FRONTEND_BASE_URL}?success=0`);
        }
        const user = await User.findOne({ facebookId : profile.facebookId });
        return user.generateAuthToken().then((token) => {
            res.cookie(COOKIE_NAME, token.token, {...cookieSettings, ...cookieMaxAge});
            res.redirect(`${process.env.FRONTEND_BASE_URL}?success=1`); // redirect back to frontend-client with cookie
        });
    })(req, res, next);
});

当用户点击/auth/facebook/callback 时,cookie 出现 enter image description here

但是,当用户返回到前端客户端时,不会在响应 header 中发送任何 cookie。

我无法解决这个问题。我是否缺少有关 cookie 的一些基础知识?

cookie is present

旁注: 当用户使用用户名和密码登录时,cookie 将返回给用户。如果重要的话,登录方法是使用 ajax-request 和 Axios 创建的。所以我知道我使用的 cookie 设置没有问题。

最佳答案

所以大约一周后,事实证明这是一个 Heroku 域问题。我为我的前端和后端应用程序(backend.herokuapp.com、frontend.herokuapp.com)使用了多个 Heroku 域。

根据 Heroku 文档

In other words, in browsers that support the functionality, applications in the herokuapp.com domain are prevented from setting cookies for *.herokuapp.com

我通过向我的应用程序添加自定义域(backend.mycustomdomain.com、frontend.mycustomdomain.com)解决了我的问题,并且从服务器响应将 cookie 添加到客户端

关于javascript - Express js redirect with cookie, cookie not present,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54360849/

相关文章:

node.js - 什么是更好的方法 : serving static files with Express or nginx?

heroku - 如何使用 pg gemfile 和 Rails 3.1 修复此 Heroku 错误?

javascript - 为什么视频 defaultPlaybackRate 在 Chrome 中不起作用?

javascript - MutationObserver 类更改

node.js - 访问 Mongoose 模型的快速 Controller 测试?

node.js - NextJS 在 '.next' 目录中找不到有效的构建

heroku - 自定义buildpack中的权限被拒绝

javascript - 如何通过 jquery 明确菜单项的状态?

javascript - ajax 切换表单 js (rails)

node.js - 参数覆盖静态路由的快速路由