覆盖meteor的默认login处理程序

我正在使用NPM ldapjs和这个Meteor LDAP项目来尝试在我的testingTelescope网站上启用LDAP。 主要问题是我希望LDAP是login的唯一方法。我的计划是围绕内置的望远镜(Meteor?)login方法进行封装。 如果LDAP凭证通过,它将运行Telescopelogin脚本并继续正常。

也许这是一个拙劣的解决scheme,存在一个更好的解决scheme? 无论如何,我需要LDAP来工作。 现在,我试图用这个覆盖默认的login方法:

Template.signin.events({ 'submit': function(event, template){ Session.set('errorMessage', null); event.preventDefault(); console.log("My login script ran!"); // I never see this message =( return Meteor.loginWithLDAP(template.find('#login-username').value, template.find('#login-password').value, function(error) { return Session.set('errorMessage', 'Login failed'); }); } }); 

正如评论所说,日志命令永远不会运行(我知道,因为我使用的是Chrome,而试图login后的控制台是空白的),另外,每次加载页面都会得到这个结果:

 Uncaught TypeError: Cannot read property 'events' of undefined (anonymous function) @ ldap_client.js:45 (anonymous function) @ typ_accounts-ldap.js?0ad074ecfc292bededc7d318da4746392aa0f5f8:94 (anonymous function) @ typ_accounts-ldap.js?0ad074ecfc292bededc7d318da4746392aa0f5f8:101 

第45行是Template.signin.events({ ,所以我得出结论, Template没有signin成员。我已经看到Template.signin.events({...})代码几个不同的地方(只是谷歌“ Template.signin.events“ ),但我想他们把这些东西拿出来用meteor更新?

我试过的另一个版本是

 Template.loginButtons.events({ 'submit #login-form': function(event, template){ ...blah blah blah... 

*喘气*不起作用。 它不会给我与原始代码,我得到的Uncaught TypeError ,但我想它只是无法覆盖正确的处理程序。

只需要清楚,这是在我的一个自定义包中运行客户端的所有代码。 我的JS文件是我在望远镜中使用的自定义软件包的直接子文件。

如何覆盖Meteor中的默认login处理程序? (也就是说,当你点击“login”button而不是Meteor的代码时,如何让我的代码运行?)


更新:

根据要求,我已经尝试了这个简短演练中的步骤,展示了“扩展meteor账户”的例子。 我在客户端的控制台中出现了很多错误,而在服务器端的控制台中出现了一个错误。 我觉得这个感觉是因为这个build议不是特别适合望远镜的,但是如果我有一个普通的meteor的例子,它就可以工作。

达到这个目的的正确方法就是像望远镜在自己的项目中那样做:

首先,将望远镜克隆到您的软件包目录中,以便您自定义它。 请注意,望远镜完全由包装制成。 这些是构成应用程序的核心Telescope模块。 我相信你只需要编辑以下两个模块: telescope-coretelescope-users

telescope-core ,login视图的configuration在packages/telescope-core/lib/config.js 。 我会在这里添加/删除任何字段,也可以重写模板以及redirect。

telescope-users ,您可能最感兴趣的是packages/telescope-users/lib/callbacks.js 。 这是你将放入你的事件处理程序的代码的地方。

请注意,望远镜使用自己的自定义库来处理callback,你也必须使用它。 幸运的是,这很简单。 您只需使用Telescope.callbacks.add(hook, callback)添加callback,然后使用Telescope.callbacks.add(hook, callback)删除它们。 Telescope.add的asynchronous版本也可以在Telescope.runAsync

你首先要查看现有的callback,并摆脱默认创build的帐户。 你想要寻找的具体钩子很可能onCreateUser 。 所以,只要在他们的github上searchTelescope.callbacks.add('onCreateUser',..你会想要做同样的事情,他们的集合钩子也被定义在同一个文件中,并replace那些你认为合适的。

希望这可以帮助。