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”似乎在方法中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用集合的meteorJS会话

MeteorJS:模板助手更新后的回调

MeteorJS - 如何防止匿名客户端订阅集合?

MeteorJS 无限页面刷新

MeteorJS 和 Coffeescript

MeteorJS:在弹出窗口中不会触发模板事件