2016-02-23 2 views
1

Это приложение Meteor имеет незащищенную и автоматическую публикацию и добавлен пароль для учетной записи.
Он использует Accounts.createUser({username: someName, password: somePwrd});, который может быть проверен на подсказке монго.не удалось: доступ запрещен при сборе метеорных данных

Я пытаюсь Tasks1.insert(params); и получить доступ запрещен

Я не знаю, почему это получить доступ запрещен для обновления и вставки на консоли браузера. Пожалуйста, скажите мне, почему и как это исправить? Thanks

//both.js 
Tasks1 = new Mongo.Collection('tasks1'); 
///////////////////////////////////////////////////// 

//server.js 
Meteor.publish('tasks1', function(){ 
    return Tasks1.find({userId: this.userId}); 
}); 

Meteor.methods({ 
    logMeIn: function(credentials) { 
    var idPin = credentials[0] + credentials[1]; 
    Accounts.createUser({username: idPin, password: credentials[1]}); 
    } 
}); 

Meteor.users.allow({ 
    insert: function (userId, doc) { 
    console.log(userId); 
    //var u = Meteor.users.findOne({_id:userId}); 
    return true; 
} 
}); 
///////////////////////////////////////////////////// 

//client.js 
Template.login.events({ 
    'click #logMe': function() { 
    var credentials = [$('#id').val(), $('#pin').val()]; 
    Meteor.call('logMeIn', credentials, function(err, result) { 
    if (result) { 
     console.log('logged in!'); 
    } 
    }); 
} 
}); 
Template.footer.events({ 
    'click button': function() { 
    if (this.text === "SUBMIT") { 
     var inputs = document.getElementsByTagName('input'); 
     for (var i = 0; i < inputs.length; i++) { 
     var params = {}; 
     params[inputs[i].name] = inputs[i].value; 
     Tasks1.insert(params); //<<<<<<---------------------- 
    } 
    } 
} 
}); 
+0

Являются ли файлы также в соответствующих каталогах (сервер/клиент и т. Д.)? И действительно ли вы сохраняете пароль пользователя в базе данных в виде открытого текста как часть имени пользователя? – MasterAM

+0

Да на оба вопроса :) –

+0

Каков путь к файлу 'server.js' относительно корня проекта? – MasterAM

ответ

3

Update: Так как вы отредактировали свой вопрос и добавил, что Tasks1.insert(params); получает доступ запрещен сообщение, вы должны добавить allow правила на Tasks коллекции и не Meteor.users коллекции.

Tasks.allow({ 
    insert: function (userId, doc) { 
      return true; 
     } 
    } 
    update: function (userId, doc, fieldNames, modifier) { 
      return true; 
     } 
    } 
    remove: function (userId, doc) { 
      return true; 
     } 
    } 
}); 

Если Accounts.createUser работает без allow правил на Meteor.users затем удалите их, поскольку это может позволить пользователям вставлять/удалять другие от самого клиента.

Окончание обновления.

С момента удаления insecure вам необходимо добавить правила для вставки, обновления или удаления файлов из коллекции.

Meteor.users.allow({ 
    insert: function (userId, doc) { 
      //Normally I would check if (this.userId) to see if the method is called by logged in user or guest 
      //you can also add some checks here like user role based check etc., 
      return true; 
     } 
    } 
    update: function (userId, doc, fieldNames, modifier) { 
      //similar checks like insert 
      return true; 
     } 
    } 
    remove: function (userId, doc) { 
      //similar checks like insert 
      return true; 
     } 
    } 
}); 

Для получения более подробной информации проверьте API documentation.

0

Определение ваших методов Meteor.method как это определит его как для сервера, так и для клиента. Это означает, что вы попытаетесь создать пользователя TWICE, как только на сервере (тот, который работает), и в другое время на клиенте. Клиент не имеет права вставлять пользовательские документы, чтобы получить эту ошибку.

Есть два варианта для вас:

1: Определение метода на сервере только окружающий его if(Meteor.isServer) или положить его в папке с именем «Сервер»

2: оставить как есть, это не повредит, но покажет ошибку в консоли.

Я уверен, что есть 3-е и, возможно, 4-е решение, но это те два, которые я использовал бы.

+0

Метод IS определен внутри server.js, Вы имели в виду коллекцию? –

+0

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

Смежные вопросы