流星“loginWIthPassword”似乎不适用于方法

时间:2015-01-26 20:12:36

标签: meteor meteor-accounts meteor-autoform

在方法中调用时,似乎“Meteor.loginWithPassword”函数不起作用。

我想用autoforms创建我的登录表单,因此我创建了一个回调方法,在用户提交登录表单后调用该方法。表单以正确的方式调用,但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);
                }
            });
        }
    }
});

我的autoforms在提交时使用以下方法调用此方法:

{{#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”添加为Username并将“test”添加为密码 - 仅用于测试。即使输入正确,错误总是相同的。

3 个答案:

答案 0 :(得分:7)

好的,所以我得到了回复,现在我知道为什么这不能按预期工作。

  1. loginWithPassord只能在客户端执行。
  2. 当您在客户端上使用Meteor.methods时,它仍然会在服务器上运行您在其中定义的功能。这就是为什么在Meteor.methods函数中调用loginWithPassword是行不通的。
  3. 只需在客户端的任何其他位置使用此功能。例如 - 直接在某个模板事件中。
  4. 让我永远地想知道它为什么不起作用。

答案 1 :(得分:0)

确保autoform实际传递正确的值。如果你在架构设置中犯了错误,它会自动清除值(设置为undefined)而不会抛出错误。

我也不完全确定在这种情况下使用方法集是否合适,因为你想在客户端而不是服务器上进行登录调用(我认为)。

答案 2 :(得分:0)

确保您当前的Meteor实例与变量MONGO_URL指向的mongo数据库建立了活动连接。当此连接关闭或中断时,Meteor.loginWithPassword无法提供错误反馈。