微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-Express js使用cookie重定向,不存在cookie

因此,我已经使用Passport-js实现了Facebook登录.我还实现了Cookie策略,以使用良好的ole用户名/密码登录.
我的设置是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

enter image description here

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

我无法解决这个问题.我缺少有关Cookie的一些基本知识吗?

cookie is present

边注:
用户使用用户名和密码登录时,cookie将返回给用户.如果需要,可使用Axios的ajax-request创建登录方法.因此,我知道我使用的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是从服务器响应中添加到客户端的

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐