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

Car*_*ape 7 javascript ldap node.js meteor telescope

我正在使用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');
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

正如评论所说,log命令永远不会运行(我知道因为我正在使用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
Run Code Online (Sandbox Code Playgroud)

第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...
Run Code Online (Sandbox Code Playgroud)

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

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

如何覆盖Meteor中的默认登录处理程序?(即我怎么做我的,当你点击的代码运行的"登录"按钮,而不是流星的代码?)


更新:

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

Coo*_*ama 4

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

首先,将望远镜克隆到您的包目录中,以便您可以自定义它。请注意,Telescope 完全由封装组成。这些是构成该应用程序的核心望远镜模块。我相信您只需编辑以下 2 个模块:telescope-core、 和telescope-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',... 您需要对它们的集合挂钩执行相同的操作,这些集合挂钩也在同一文件中定义,并根据需要替换它们。

希望这可以帮助。