我有两个应用:site
和admin
。我需要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记录器会产生以下浏览器控制台输出:
考虑到这一点,我们知道:
为什么没有admin
获取任何数据?提前致谢
*更新*
来自site
和admin
的标头:
$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://*;
正如我可以see:
connect-src * 'self'
,该应用程序可通过websockets与任何域连接。希望这有助于缩小问题范围。
答案 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服务器建立第二个连接。