覆盖Meteor的默认登录处理程序

时间:2015-07-17 19:24:10

标签: javascript node.js meteor ldap telescope

我正在使用NPM ldapjs和此Meteor LDAP project尝试在我的测试Telescope网站上启用LDAP。主要问题是我希望LDAP成为登录的唯一方法。我的计划是围绕内置的Telescope(Meteor?)登录方法进行包装。如果LDAP凭据通过,它将运行Telescope登录脚本并继续正常运行。

也许这是一个hacky解决方案,存在更好的解决方案?无论如何,我需要LDAP才能工作。现在,我试图用这个覆盖默认的登录方法:

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,尝试登录后控制台是空白的),另外,每次加载页面时我都会这样:

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({...})代码有几个不同的地方(只有google "Template.signin.events" with the quotes),但我猜他们用Meteor更新了这些东西?

我试过的另一个版本是

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

* gasp * 也不起作用。它没有给我原始代码的Uncaught TypeError,但我想它只是无法覆盖正确的处理程序。

为了清楚起见,这是在我的自定义包中运行客户端的所有代码。我的JS文件是我在Telescope中的自定义包的直接子代。

如何覆盖Meteor中的默认登录处理程序? (例如,当您单击"登录"按钮而不是Meteor的代码时,如何运行我的代码?)

更新

根据请求,我已经尝试了this short walkthrough中显示"扩展流星帐户"的示例中的步骤。我在客户端的控制台中遇到很多错误,在服务器端的控制台中出现一个错误。我得到了正在发生的感觉,因为这个建议是特别适用于Telescope的,但也许如果我有一个普通的Meteor实例,那就可以了。

1 个答案:

答案 0 :(得分:4)

实现这一目标的正确方法是以与望远镜在自己的项目中完成相同的方式:

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

telescope-core中,登录视图的配置在packages/telescope-core/lib/config.js定义。我会在这里添加/删除任何字段,您也可以覆盖模板以及重定向。

telescope-users中,您可能对packages/telescope-users/lib/callbacks.js最感兴趣。您可以将这些代码放入事件处理程序中。

请注意,Telescope使用自己的自定义库来处理回调,您也必须使用它们。幸运的是,它非常简单。您只需使用Telescope.callbacks.add(hook, callback)添加回调,然后使用Telescope.callbacks.remove(hook, callback)将其删除。 Telescope.add还提供了Telescope.runAsync的异步版本。

您首先要查看现有的回调,并删除默认情况下创建帐户的任何内容。您想要查找的具体钩子很可能是onCreateUser。所以只需搜索他们的github Telescope.callbacks.add('onCreateUser',..。您希望对它们的集合挂钩执行相同的操作,这些挂钩也在同一个文件中定义,并替换您认为合适的文件。

希望这有帮助。