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

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

也许这是一个拙劣的解决方案,存在一个更好的解决方案? 无论如何,我需要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“),但我想他们会用Meteor更新取出这些东西?

我试过的另一个版本是

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

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

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

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


更新:

根据要求,我已经尝试了这个简短演练中的步骤,展示了“扩展流星帐户”的示例。 我在客户端的控制台中发现了很多错误,并且在服务器端的控制台中发生了一个错误。 我觉得这种感觉正在发生,因为这个建议并不是特别适用于望远镜,但也许如果我有一个普通的流星实例,它就可以工作。


实现这一目标的正确方法是按照Telescope在自己的项目中完成的方式进行:

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

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

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

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

您首先需要查看现有的回调,并在默认情况下删除创建该帐户的任何内容。 您需要查找的具体钩子很可能是onCreateUser 。 因此,只需在他们的github上搜索Telescope.callbacks.add('onCreateUser',..你会想要做同样的事情,他们的集合钩子也被定义在同一个文件中,并替换那些你认为合适的东西。

希望这可以帮助。

链接地址: http://www.djcxy.com/p/86777.html

上一篇: Overwriting Meteor's default login handler

下一篇: Spring Boot Security OAuth2 with Form Login