【发布时间】: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