明确将localhost重定向到mydomain.com的多域cookie

时间:2015-04-08 06:46:33

标签: session cookies express cross-domain

我有一个应用程序,我试图让用户创建自己的子域名。 为了在开发和测试时让它在本地工作,我必须在我的主机文件中设置一些可用的子域。

登录时,我正在使用oauth,谷歌是我正在使用的第一个提供商。

当用户从mydomain.com谷歌登录时强制重定向身份验证到localhost。我编写了一些中间件来检查req.get('host')localhost,还是重定向到mydomain.com

这似乎工作正常,但是当重定向转到localhost时,似乎express与mydomain.com返回的会话不匹配。

由于这仅适用于开发和测试,是否有办法允许快递跨域共享所有会话信息,或添加白名单?

我在SO上找到的东西指出我将重定向中间件作为

module.exports = function(baseUrl){
    var base = baseUrl.split(':');
    base = base[1].replace('//','');
    return function(req, res, next) {

        console.log('in redirect');
        res.header('Access-Control-Allow-Credentials', true);
        res.header('Access-Control-Allow-Origin', base);
        res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
        res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
        if(req.hostname.indexOf('localhost') > -1) {
            var redirect = req.get('host').replace('localhost', base);
            console.log('redirect is', redirect, req.path);
            return res.redirect(redirect + '/');
        }
        next();
    }
}

但是在我的帖子登录路线中,我需要检查请求的URL是否是localhost,如果是,那么我需要替换它。出于某种原因,中间件未在此路由中被调用。它在我最初

时被调用
 function createUrl(req, subdomain){
    var domain = req.get('host') === 'localhost:3000' ? 'mydomain.com:3000' : req.get('host');
    var url = req.protocol + '://' + subdomain + '.' + domain;
    return url + '/team'
}

function redirectToSubdomain(req, res){
    var url = createUrl(req, "me");
    console.log('new url is ', url);
    res.redirect(url)
}
router.get('/', auth.isAuthenticated(), function(req, res) {
    var team = Team.getSubdomain(req);
    if(team.error) return redirectToSubdomain(req, res);
    return res.render('team', req.data);
});

我已尝试将我的Cookie设置为接受所有域

app.use(passport.session({cookie: { secure: true, domain: '*'}}));

1 个答案:

答案 0 :(得分:1)

我最终没有使用dev.localhost作为开发网站的主要网址,而不是subdomain.dev.localhost用于子域名,以及我的Cookie集domain: '.dev.localhost'。做了一个享受。