1

我需要覆盖 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');
};

该包是一个核心流星包,所以我认为我不能删除它并添加修改版本。

我试图将编辑后的变量(函数)添加到我的主服务器代码中,但没有看到流星的行为发生任何变化。

非常感谢,丹尼尔。

4

2 回答 2

2

您需要制作一个包来覆盖现有的包。

如果要替换oauth的文件,您应该创建一个新包,其中包含来自 oauth 的包中的所有文件。

然后将这个新包放入/packages并运行meteor add oauth以将其添加到您的项目中。新包将覆盖现有的标准流星一号。

不过,您需要考虑此选项,这意味着您必须在每次流星更新其软件包时保持最新状态。

于 2013-09-07T08:00:15.050 回答
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);
});
于 2015-11-11T07:33:16.373 回答