Метод возвращает неопределенное на клиенте - PullRequest
0 голосов
/ 19 февраля 2019

Я могу сгенерировать случайный одноразовый номер на сервере, и он отображается на консоли, но это значение не возвращается клиенту.

Метод сервера:

Meteor.methods({
    'user.generateNewLoginAttempt': function(user_address) {
        let exists = Meteor.users.findOne({
            username: user_address
        });
        let nonce = Random.secret(16);

        console.log(nonce); //shows random string

        if (exists) {
            // user already exists, update nonce
            Meteor.users.update(exists._id, {
                $set: {
                    nonce: nonce
                }
            });
        } else {
            // create new user
            let userId = Accounts.createUser({
                username: user_address,
                address: user_address,
                nonce: nonce
            });
        }

        return nonce;
    },
});

Код клиента:

Meteor.call('user.generateNewLoginAttempt', user_address, function(err, nonce) {
    if (err)
        console.log(err);
    /shows up internal server error
    // nonce = the nonce generated on server
    else {
        console.log('nonce: ' + nonce);
        // hash nonce
        let sh3_nonce = web3.sha3(nonce); // depending on web3 version use: web3.utils.sha3(nonce)
        console.log('sh3 hashed nonce: ' + sh3_nonce);

        // sign hashed nonce
        web3.eth.sign(user_address, sh3_nonce, function(err, res) {
            if (err) {
                console.log(err);
            } else {
                // res = the signed nonce
                // login with signed nonce
                login(res);
            }
        });
    }
});

На стороне клиента отображается Internal Server Error(500).Я попытался удалить большую часть кода из метода сервера и просто вернуть какое-то значение, но это также не работает.

1 Ответ

0 голосов
/ 19 февраля 2019

Я не думаю, что вы можете установить одноразовый номер и адрес в пользовательском документе таким образом, насколько я помню. Accounts.createUser использует только имя пользователя, пароль, электронную почту и профиль, поэтому, если вы хотите сохранить одноразовый номер и адресна объекте пользователя вам нужно вставить их в объект "профиля".

ПРОДОЛЖАЙТЕ!использование профиля для хранения пользовательских данных не рекомендуется , поскольку поведение метеора по умолчанию - , позволяющее пользователям редактировать профиль , поэтому, если вы сделаете это, вам нужно будет убедиться, что вы установили параметр allow /Отклоняйте политики самостоятельно.

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

...