覆盖Meteor的oauth包

时间:2013-09-06 14:08:51

标签: javascript oauth meteor

我需要覆盖放置在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。

2 个答案:

答案 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);
});