You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Passport+Express接入passport-discord部署后浏览器不存储Cookie问题

问题修复方案

1. 适配跨域HTTPS场景的Session Cookie配置

浏览器的第三方Cookie限制会拦截跨域下发的未配置安全属性的Cookie,这是本地正常线上失效的核心原因,修改API主文件的session配置:

app.use(
    session({
        secret: 'session secret', // 建议迁移到环境变量存储,禁止硬编码
        cookie: {
            maxAge: 7 * 24 * 60 * 60 * 1000, // 原配置仅30秒有效期过短,可按需调整
            secure: process.env.NODE_ENV === 'production', // 生产环境开启HTTPS-only
            sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'lax', // 跨域场景必须设为none
            httpOnly: true // 开启后可避免XSS攻击窃取Cookie
        },
        resave: false,
        saveUninitialized: false,
        store: MongoStore.create({
            mongoUrl: 'database uri', // 建议迁移到环境变量存储
        }),
    })
);

2. 开启Express代理信任

Vercel等Serverless平台通过反向代理转发请求,需要开启代理信任才能正确识别HTTPS协议,否则带secure属性的Cookie不会被下发,在API主文件的CORS配置前添加以下代码:

app.set('trust proxy', 1);

3. 修正授权回调重定向地址

当前auth.js中回调重定向地址写死为本地地址,部署后需替换为线上前端地址,建议用环境变量区分环境:

router.get(
    '/discord/redirect',
    passport.authenticate('discord'),
    (req, res) => {
        const redirectUrl = process.env.NODE_ENV === 'production' 
            ? 'https://你的线上前端域名/guilds' 
            : 'http://localhost:3001/guilds';
        res.redirect(redirectUrl);
    }
);

4. 校验CORS配置

确保CORS配置中的frontend website url为线上前端的完整根域名,不要携带末尾斜杠,例如填写https://xxx.vercel.app而非https://xxx.vercel.app/。

5. 校验Discord OAuth配置

登录Discord开发者后台,在应用的OAuth2设置页的Redirects列表中,确认已添加线上回调地址https://你的线上API域名/discord/redirect,且和代码中callbackURL的取值完全一致。

内容的提问来源于stack exchange,提问作者FC5570

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:57:01