2013-04-11 11 views
13

Jak można dodać nagłówek Access-Control-Allow-Origin: * do wszystkich odpowiedzi (w szczególności, interesują mnie pliki statyczne pod /public/) w Meteor? Potrzebowałbym tego, aby zewnętrzne aplikacje internetowe mogły uzyskać dostęp do danych przez moją aplikację Meteor. Więcej informacji o włączaniu CORS is here.Jak dodać nagłówki CORS do aplikacji Meteor?

+2

Myślę, że to niemożliwe w obecnym stanie rdzenia Meteorów. Zdecydowanie potrzebujemy sposobów na dostosowanie nagłówków 'HTTP'. – mquandalle

+0

Czy nie ma nawet hackish sposób? Gdybym chciał użyć widelca Meteora, co powinienem zmienić? – Mitar

+1

Proponuję, aby odpowiedź Thomasa była właściwa. Czysty sposób na dostęp do oprogramowania pośredniego połączenia bez pakietu/hackowania. –

Odpowiedz

18

Oto mały fragment pisałem. Możesz posłużyć się przykładem, jak uzyskać dostęp do podstawowych połączeń meteorologicznych i modyfikować nagłówki, a także całkiem niezły zrzut dla każdego projektu meteorytów:

/** 
* HTTP Header Security 
* 
* enforce HTTP Strict Transport Security (HSTS) to prevent ManInTheMiddle-attacks 
* on supported browsers (all but IE) 
* > http://www.html5rocks.com/en/tutorials/security/transport-layer-security 
* 
* @header Strict-Transport-Security: max-age=2592000; includeSubDomains 
*/ 

var connectHandler = WebApp.connectHandlers; // get meteor-core's connect-implementation 

// attach connect-style middleware for response header injection 
Meteor.startup(function() { 
    connectHandler.use(function (req, res, next) { 
    res.setHeader('Strict-Transport-Security', 'max-age=2592000; includeSubDomains'); // 2592000s/30 days 
    return next(); 
    }) 
}) 
+0

Dziękuję. Mam nadzieję, że zostanie to uznane za odpowiedź ... znacznie czystsze wdrożenie. –

+1

Z najnowszą wersją Meteor (0.8.2) możesz użyć haka 'WebApp.rawConnectHandlers'", zobacz https://github.com/mizzao/meteor-timesync/blob/master/timesync-server.js – hiddentao

8

Są na to dwa sposoby. Jednym z nich jest zmodyfikowanie kodu meteorytów i dodanie go (aby każdy plik miał ten nagłówek). To może nie być świetny pomysł, ponieważ nie chcesz, aby każdy pojedynczy plik miał to. Ale jeśli nie zmieni się to zrobić z podpinania do aplikacji

var app = __meteor_bootstrap__.app; 
app.use(function(req,res) { 
    res.setHeader('access-control-allow-origin', '*'); 
}); 

Drugim jest użycie niestandardowego trasy z czymś meteor router. W ten sposób można kontrolować, jakie pliki chcesz mieć nagłówki w tak jego prawdopodobnie najlepiej użyć coś takiego

stronie serwera JS:

Meteor.Router.add('/yourfile.txt', function() { 
    this.response.setHeader('access-control-allow-origin', '*'); 

    var fs = Npm.require("fs"); 
    return fs.readFileSync("/public/yourfile.txt", "utf8"); 

}); 
+0

Akshat, could readFileSync zostały użyte w tym przypadku, aby zmniejszyć kod? – matb33

+0

Świetny pomysł! Wymieniłem kod na – Akshat

+0

@shat punkt wyjaśnienia ... czy mówisz o dokonaniu edycji w rdzeniu meteorytowym? gdzieś w okolicy: https://github.com/meteor/meteor/blob/master/tools/server/server.js#L297 ? – zeroasterisk

Powiązane problemy