MeteorJs loginWIthPassword, похоже, не работает в методе

Кажется, что функция "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);
                }
            });

Мой метод не делает абсолютно ничего, кроме этого, поэтому я спрашиваю себя, что здесь происходит не так.

Ps.: Я знаю, что добавил "тест" в качестве имени пользователя и "тест" в качестве пароля - это просто для проверки. Даже когда вход правильный, ошибка всегда одна и та же.


person TJR    schedule 26.01.2015    source источник
comment
Вам когда-нибудь удавалось это исправить? У меня такая же проблема и я не могу заставить его работать.   -  person Patrick Hübl-Neschkudla    schedule 08.08.2015
comment
Для этого я открыл новую проблему на github: github.com/meteor/meteor/issues/4912 Репозиторий воспроизведения: github.com/flipace/meteor-accounts-password-bug Кажется, это происходит только при попытке использовать эту функцию внутри функции Meteor.methods.   -  person Patrick Hübl-Neschkudla    schedule 08.08.2015


Ответы (3)


Итак, я получил ответ, и теперь я знаю, почему это не работает должным образом.

  1. loginWithPassord может выполняться только на клиенте.
  2. Когда вы используете Meteor.methods на клиенте, он по-прежнему будет запускать функции, которые вы определили в нем, на сервере. Вот почему вызов loginWithPassword внутри функции Meteor.methods работать не будет.
  3. Просто используйте эту функцию в любом другом месте клиента. Например - непосредственно в каком-то шаблонном событии.

Мне потребовалась целая вечность, чтобы выяснить, почему это не работает.

person Patrick Hübl-Neschkudla    schedule 09.08.2015
comment
насколько безопасно использовать эту функцию на стороне клиента? - person Samundra Khatri; 23.10.2015
comment
эта функция запустит поток входа в систему, где реальный вход обрабатывается на сервере. клиент получит токен в случае успешного входа в систему. поэтому использование этой функции должно быть в порядке. - person Patrick Hübl-Neschkudla; 23.10.2015

Убедитесь, что автоформа действительно передает правильные значения. Если вы допустили ошибку в настройке схемы, она автоматически очистит значения (установив значение undefined) без выдачи ошибки.

Я также не совсем уверен, что использование его с набором методов будет работать в этом случае, так как вы хотите выполнить вход в систему на клиенте, а не на сервере (я думаю).

person jimmiebtlr    schedule 24.03.2015

Убедитесь, что ваш текущий экземпляр Meteor имеет активное соединение с базой данных mongo, на которую указывает переменная MONGO_URL. Meteor.loginWithPassword не дает обратной связи об ошибке, когда это соединение закрывается или разрывается.

person Oscar Xavier Chavarro García    schedule 16.09.2016