2016-02-11 1 views
1

Я не могу понять, почему я получаю эту ошибку. Я создал метод Метеор. Может быть, мне просто нужен второй набор глаз и указать на мою ошибку. Im создает приложение мгновенного обмена сообщениями, где онлайн-пользователи могут иметь один на один чат. Как только я нажму на онлайн-пользователя (маршрутизация). Консоль мгновенно имеетМетод Метеор: я продолжаю получать вставку: Ошибка доступа на консоли

Вставка не выполнена: доступ запрещен.

Если я попытаюсь отправить сообщение, это ошибка, которую я получаю.

J ... y.Event {originalEvent: Event, тип: "отправить", TIMESTAMP: 1455207989065, jQuery1112075371492956765: правда, что: неопределенные ...} meteor.js: не удалось +862 вставки: Доступ запрещен meteor.js : 862 обновления неуспешно: Доступ запрещен 17799meteor.js: +862 вставки не удалась: Доступ запрещен

Im действительно новое Метеор и любая помощь или совет будет очень ценится.

Вот мой HTML

<template name="chat_page"> 
    <h2>Type in the box below to send a message!</h2> 
    <div class="row"> 
     <div class="col-md-12"> 
      <div class="well well-lg"> 
      {{#each messages}} 
      {{> chat_message}} 
      {{/each}} 
      </div> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-md-12"> 
      <form class="js-send-chat"> 
      <input class="input" type="text" name="chat" placeholder="type a message here..."> 
      <button class="btn btn-default">send</button> 
     </form> 
     </div> 
    </div> 
</template> 

<!-- simple template that displays a message --> 
<template name="chat_message"> 
    <div class = "container"> 
     <div class = "row"> 
      <img src="/{{profile.avatar}}" class="avatar_img"> 
      {{username}} said: {{text}} 
     </div> 
    </div> 
    <br> 
</template> 

Client Side

Template.chat_page.helpers({ 
    messages:function(){ 
     var chat = Chats.findOne({_id:Session.get("chatId")}); 
     return chat.messages; 
    }, 
    other_user:function(){ 
     return "" 
    }, 

    }); 

Template.chat_page.events({ 
    'submit .js-send-chat':function(event){ 
    console.log(event); 
    event.preventDefault(); 
    var chat = Chats.findOne({_id:Session.get("chatId")}); 
    if (chat){ 
     var msgs = chat.messages; 
     if (!msgs){ 
     msgs = []; 
     } 
     msgs.push({text: event.target.chat.value}); 
     event.target.chat.value = ""; 
     chat.messages = msgs; 
     Chats.update(chat._id, chat); 
     Meteor.call("sendMessage", chat); 
    } 
    } 
}) 

Метод

Meteor.methods({ 
    sendMessage: function (chat) { 
    Chats.insert({ 
     chat: chat, 
     createdAt: new Date(), 
     username: Meteor.user().profile.username, 
     avatar: Meteor.user().profile.avatar, 
    }); 
    }, 
}); 
+0

если только вы прошли хорошую начальную документацию !! проверьте это http://meteortips.com/book.pdf –

+0

Эй, спасибо. Это очень поможет. – Jessica

ответ

2

У вас еще есть небезопасные и autopublish пакет?

Chats.update(chat._id, chat); 

Эта часть кажется немного странной для меня. базовое обновление для коллекции: Chats.update ({_ id: chat._id}, {$ set: {message: whateverMymsgis}}); Метеор является строгим с помощью метода обновления, который вам всегда нужно передать _id, чтобы что-то обновить.

Если у вас нет автообновляющихся и небезопасных пакетов, внесли ли вы все части разрешить/публиковать/подписывать свои коллекции?

Надеется, что это поможет :)

+1

Спасибо, я также принял ваши советы, но и обновил Chats.update, но я, возможно, сделал это неправильно, потому что я получаю новую ошибку. Что происходит, обновление не выполнено: доступ запрещен. Не разрешать валидаторы, установленные в ограниченном наборе для метода 'update'. Я изменил его на Chats.update ({_ id: chat._id}, {$ set: {message: msgs}}); – Jessica

1

Это произошло потому, что вы удалили insecure пакет и не указало allow/deny для chat коллекции, а также ваш метод метеора был написано на client стороны.

Быстрое и правильное решение будет перемещать ваш метеорный метод на server side.

+0

Спасибо, я принял ваш совет и перевел метод на сервер, и я добавил разрешение. Я больше не получаю ошибку при нажатии на пользователя, но я получаю новую ошибку при попытке отправить сообщение. Что происходит, обновление не выполнено: доступ запрещен.Не разрешать валидаторы, установленные в ограниченном наборе для метода 'update'. – Jessica

+0

Chats.allow ({ вставки: функция (идентификатор пользователя, документ) {// только позволяют разместить, если вы вошли в систему возврата !! идентификатор пользователя; } }); – Jessica

+0

Я также изменил Chats.update под моими событиями. Chats.update ({_ id: chat._id}, {$ set: {message: msgs}}); – Jessica