使用DDP连接两个Meteor 1.3应用程序

时间:2016-05-06 22:25:12

标签: javascript node.js meteor cross-domain ddp

我有两个应用:siteadmin。我需要admin使用DDP订阅site个出版物中的一个。我无法找到有关此内容的最新文章或问题,但无效。我几乎取消了对XSS的所有保护,但没有成功。这是我的代码:

site/server/startup.js

中的

BrowserPolicy.content.allowSameOriginForAll("*");
BrowserPolicy.content.allowDataUrlForAll("*");
BrowserPolicy.content.allowOriginForAll("*");
site/server/publications.js

中的

Meteor.publish('asdf', function(){
    var self = this;
    self.added( "asdf", 'asdfasdfasdflLO', {"TEST","DATA"} );
    self.added('gallery', new Mongo.ObjectID("572b9503d338f74c4700bbbb"), {
        "uuid" : "566caf28-da7b-45d7-ad4a-523aba983cb3",
        "name" : "TEST GALLERY",
        "description" : "THIS IS A TEST",
        "order" : 0,
        "id" : 1
    });
    console.log("SUBSCRIPTION READY");

    self.ready();
    self.onStop(function(){console.log("SUBSCRIPTION STOPPED");
    })
});
admin/server/startup.js

中的

BrowserPolicy.content.allowSameOriginForAll("*");
BrowserPolicy.content.allowDataUrlForAll("*");
BrowserPolicy.content.allowOriginForAll("*");
admin/lib/...../connections.js

中的

import { DDP } from 'meteor/ddp-client' // behaves identically with or without this line

 SiteConnection = DDP.connect(Meteor.settings.public.site.rootUrl);
admin/client/……./page.js

中的

Template.page.onCreated(function(){
    console.log("created");

    FromSite = new Meteor.Collection();

    SiteConnection.subscribe('asdf', function() {
        console.log('Data list starts here:');
        FromSite.find().forEach(function(data){console.log(data)});
        Galleries.find().forEach(function(data){console.log(data)});
    });
});

访问管理员页面时,site会记录SUBSCRIPTION READY但从不发送任何数据。

另一方面,当site订阅asdf本身时,我的DDP记录器会产生以下浏览器控制台输出:

enter image description here

考虑到这一点,我们知道:

  • 出版物
  • 我们正在连接到正确的网址

为什么没有admin获取任何数据?提前致谢

*更新*

来自siteadmin的标头:

$curl -I https://www.site-local.com/
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 09 May 2016 20:17:18 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
vary: Accept-Encoding
x-content-type-options: nosniff
access-control-allow-origin: *
x-frame-options: SAMEORIGIN
content-security-policy: default-src 'self' data: http://* https://*; script-src 'self' 'unsafe-inline' data: http://* https://*; connect-src * 'self' data: http://* https://*; img-src data: 'self' http://* https://*; style-src 'self' 'unsafe-inline' data: http://* https://*;

正如我可以seeconnect-src * 'self',该应用程序可通过websockets与任何域连接。希望这有助于缩小问题范围。

1 个答案:

答案 0 :(得分:0)

FromSite = new Meteor.Collection();

此行不定义集合与集合相关的集合或连接。虽然看起来你也有点混淆了这种情况。这里没有跨站点数据传输。 这甚至不需要:

SiteConnection = DDP.connect(Meteor.settings.public.site.rootUrl);

问题是你在客户端的流星收集并没有描述它所引用的集合 - 你需要的是:

Template.page.onCreated(function(){
    console.log("created");

    FromSite = new Meteor.Collection('asdf');

    Meteor.subscribe('asdf', function() {
        console.log('Data list starts here:');
        FromSite.find().forEach(function(data){console.log(data)});
        Galleries.find().forEach(function(data){console.log(data)});
    });
});

注意第4和第6行的更改

如果我没弄错的话,SiteConnection似乎只是与默认的Meteor服务器建立第二个连接。