我需要覆盖放置在Meteor的oauth包中的oauth_server.js中的函数。
我想替换 -
var closePopup = function(res) {
res.writeHead(200, {'Content-Type': 'text/html'});
var content =
'<html><head><script>window.close()</script></head></html>';
res.end(content, 'utf-8');
};
有类似的东西 -
var closePopup = function(res) {
res.writeHead(200, {'Content-Type': 'text/html'});
var content =
'<html><head><script>window.location.href = "http://www.google.com/";</script></head></html>';
res.end(content, 'utf-8');
};
包是一个核心流星包,所以我认为我不能删除它并添加修改版本。
我尝试将已编辑的变量(函数)添加到我的主服务器代码中,但看不到meteor行为的变化。
非常感谢,Daniel。
答案 0 :(得分:2)
您需要创建一个包来覆盖现有的包。
如果您要替换oauth
个文件,您应该创建一个新包,其中包含来自oauth的包中的所有文件。
然后将此新包放在/packages
中并运行meteor add oauth
以将其添加到您的项目中。新包将覆盖现有的标准流星。
您需要考虑这个选项,这意味着每次meteor更新其包时都必须保持最新。
答案 1 :(得分:2)
另一种选择是覆盖我最近需要用我自己覆盖OAuth._checkRedirectUrlOrigin
所需的函数。因为该函数表示如果需要在流星源代码中被覆盖,我就是这样做的:
Meteor.startup(function () {
Package['oauth'].OAuth._checkRedirectUrlOrigin = function (redirectUrl) {
console.log(redirectUrl);
var appHost = "http://localhost:3000";
var appHostReplacedLocalhost = Meteor.absoluteUrl(undefined, {
replaceLocalhost: true
});
return (
redirectUrl.substr(0, appHost.length) !== appHost &&
redirectUrl.substr(0, appHostReplacedLocalhost.length) !== appHostReplacedLocalhost
);
};
// testing if it worked :)
Meteor.setTimeout(function () {
console.log(Package['oauth'].Oauth._checkRedirectUrlOrigin.toString());
}, 5000);
});