MeteorJs“loginWIthPassword”似乎在方法中不起作用
Posted
技术标签:
【中文标题】MeteorJs“loginWIthPassword”似乎在方法中不起作用【英文标题】:MeteorJs "loginWIthPassword" seems not to work in method 【发布时间】:2015-03-25 07:52:07 【问题描述】:似乎“Meteor.loginWithPassword”函数在方法中调用时不起作用。
我想用自动表单创建我的登录表单,因此我创建了一个回调方法,该方法在用户提交登录表单后被调用。表单被正确调用,但 loginWithPassword 函数似乎不起作用。
这是我的方法(在客户端和服务器端)
Meteor.methods(
autoform_test_login : function (doc)
console.log('Called login method');
if (Meteor.isClient)
Meteor.loginWithPassword('test', 'test', function(e)
if (e)
console.log(e);
);
);
我的自动表单在提交时调用此方法:
#autoForm schema="Schema_Login" id="form_login" type="method" meteormethod="autoform_test_login"
....
提交此表单时出现此错误:
Error: No result from call to login stack: (...), message: "No result from call to login"
当我现在打开浏览器控制台并输入:
Meteor.call('autoform_test_login');
我会得到同样的错误。
但是:当我在控制台中输入以下内容时,它可以工作(现在的错误是:找不到用户名):
Meteor.loginWithPassword('test', 'test', function(e)
if (e)
console.log(e);
);
我的方法完全没有其他作用,然后这个被剪断了,所以我问自己这里出了什么问题。
附言: 我知道我添加了“test”作为用户名和“test”作为密码——它只是为了测试。即使输入正确,错误也始终相同。
【问题讨论】:
你有没有解决过这个问题?我有同样的问题,无法让它工作。 我为此在 github 上打开了一个新问题:github.com/meteor/meteor/issues/4912 复制存储库:github.com/flipace/meteor-accounts-password-bug 似乎只有在尝试在 Meteor.methods 函数中使用此函数时才会发生这种情况。 【参考方案1】:好的,所以我收到了回复,现在我知道为什么它没有按预期工作。
loginWithPassord
只能在客户端执行。
当您在客户端使用 Meteor.methods 时,它仍会在服务器上运行您在其中定义的函数。这就是为什么在 Meteor.methods 函数中调用 loginWithPassword 不起作用的原因。
只需在客户端的其他任何地方使用此功能即可。例如 - 直接在某个模板事件中。
我花了很长时间才弄清楚它为什么不起作用。
【讨论】:
在客户端使用此功能有多少安全性? 这个函数将启动一个登录流程,真正的“登录”在服务器上进行处理。如果登录成功,客户端将收到一个令牌。所以使用这个功能应该没问题。【参考方案2】:确保 autoform 实际上传递了正确的值。如果您在架构设置中犯了错误,它将自动清除值(设置为未定义)而不会引发错误。
我也不完全确定在这种情况下是否可以将它与方法集一起使用,因为您想在客户端而不是服务器上进行登录调用(我认为)。
【讨论】:
【参考方案3】:确保您当前的 Meteor 实例与变量 MONGO_URL 指向的 mongo 数据库有活动连接。当此连接关闭或断开时,Meteor.loginWithPassword 无法提供错误反馈。
【讨论】:
以上是关于MeteorJs“loginWIthPassword”似乎在方法中不起作用的主要内容,如果未能解决你的问题,请参考以下文章