我正在使用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');
});
}
});
正如评论所说,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
第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...
但是,*喘气* 这也不起作用。它并没有像原始代码一样给我 Uncaught TypeError
,但我猜它只是未能覆盖正确的处理程序。
为了明确,这是我自己定制包内运行的所有客户端代码。我的 JS 文件是我在 Telescope 中定制包的直接子级。
如何覆盖 Meteor 中的默认登录处理程序?(即,如何使点击“登录”按钮时运行我的代码而不是 Meteor 的代码?)
更新:
应要求,我尝试了这个简短的演示文稿中介绍的“扩展 Meteor 账户”的步骤。我在客户端控制台上得到了很多错误信息,并在服务器端控制台上得到了一个错误信息。我感觉这是因为该建议与 Telescope 不兼容,但也许如果我有一个普通的 Meteor 实例,它会起作用。
Template.XXX.events
是指要捕获事件的模板名称。您的登录模板的名称是什么?例如:<template name="Login"><form id="loginForm">...登录表单...</form></template>
。您可以这样做:Template.Login.events({'submit #loginForm':function(event,template){...your code here...}});
- Michael Mason