我正在使用 NPM ldapjs还有这个Meteor LDAP project尝试在我的测试望远镜网站上启用 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 中的步骤显示了“扩展 Meteor 帐户”的示例。我在客户端的控制台中收到很多错误,在服务器端的控制台中收到一个错误。我感觉到这种情况正在发生,因为这个建议特别不适用于 Telescope,但也许如果我有一个普通的旧 Meteor 实例,它会起作用。
最佳答案
实现这一点的正确方法是像 Telescope 在他们自己的项目中那样做:
首先,将 telescope 克隆到您的包目录中,以便您可以自定义它。请注意,Telescope 完全由包组成。这些是构成应用程序的核心 Telescope 模块。我相信您只需编辑以下 2 个模块:telescope-core
和 telescope-users
。
在 telescope-core
中,登录 View 的配置定义在 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
获得。
您首先要查看现有的回调并删除默认情况下创建帐户的任何内容。您要查找的特定 Hook 很可能是 onCreateUser
。因此,只需在他们的 github 中搜索 Telescope.callbacks.add('onCreateUser',..
。您需要对他们的集合 Hook 做同样的事情,这些 Hook 也在同一个文件中定义并替换那些如您所愿。
希望这对您有所帮助。
关于javascript - 覆盖 Meteor 的默认登录处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31483274/