7

我正在使用NPM ldapjs和这个Meteor LDAP 项目来尝试在我的测试 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({...})在几个不同的地方看到了该代码(只是带有引号的谷歌“Template.signin.events”),但我猜他们通过 Meteor 更新删除了这些东西?

我试过的另一个版本是

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

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

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

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


更新:

根据要求,我尝试了这个简短演练中的步骤,其中显示了“扩展 Meteor 帐户”的示例。我在客户端的控制台中有很多错误,在服务器端的控制台中有一个错误。我感觉到这种情况正在发生,因为该建议不适用于 Telescope,但也许如果我有一个普通的 Meteor 旧实例,它会起作用。

4

1 回答 1

4

实现这一点的正确方法是像 Telescope 在他们自己的项目中那样做:

首先,将望远镜克隆到您的包目录中,以便您可以自定义它。请注意 Telescope 完全由包组成。这些是构成应用程序的核心 Telescope 模块。我相信您应该只需要编辑以下 2 个模块: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',... 你会想要对他们的集合钩子做同样的事情,这些钩子也在同一个文件中定义,并替换你认为合适的那些。

希望这可以帮助。

于 2015-07-25T21:06:33.523 回答