【问题标题】:Express js redirect with cookie, cookie not presentExpress js 使用 cookie 重定向,cookie 不存在
【发布时间】:2019-06-19 00:38:58
【问题描述】:

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

在 localhost 上,一切都像魅力一样,但在舞台和生产环境中却不行。不知道这是否重要,但我正在使用 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 就会出现

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

我无法解决这个问题。我错过了一些关于 cookie 的基础知识吗?

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

【问题讨论】:

  • 如果您还使用像 apollo 或 graphql-yoga 这样的 graphql 服务器,这将非常有用。你让我很开心,用你的 sn-p 我解决了我的问题。感谢您的有用问题! ^_^

标签: javascript express heroku cookies


【解决方案1】:

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

根据 Heroku 文档

换句话说,在支持该功能的浏览器中, herokuapp.com 域中的应用程序无法设置 *.herokuapp.com 的 cookie

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-01
    • 2016-11-14
    • 2012-07-19
    • 2018-08-09
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多