2012-10-06 6 views
12

Pierwsza wstawka działa dobrze, ale druga daje "Wstaw niepowodzenie: 403 - Odmowa dostępu" w konsoli. Automatycznie subskrybuj jest włączony, a ja jestem w gałęzi auth. Jak skonfigurować mój kod, aby mieć serwer MongoDB, do którego klienci mogą pisać?Wtrącenie meteoru Mongo nie powiodło się - odmowa dostępu

People = new Meteor.Collection('people'); 

if (Meteor.is_server) { 
People.insert({name: 'Bob'}); 
} 
if (Meteor.is_client) { 
People.insert({name: 'Bob'}); 
} 
+0

jesteś na oddziale auth? –

+0

Tak, jestem w gałęzi auth. – Alex

+0

OK, więc domyślam się, że to dlatego, że nie mam walidatora wstawiania ... – Alex

Odpowiedz

18

Ponieważ pracujemy z autoryzacją, należy zezwolić lub zabronić klientom staramy się robić wkładki, aktualizacje, usuwa i pobiera. Aby rozwiązać ten konkretny problem, należy dodać metodę Collection.allow(), aby umożliwić działanie wkładki klienta.

if(Meteor.is_server) { 

    People.allow({ 
    'insert': function (userId,doc) { 
     /* user and doc checks , 
     return true to allow insert */ 
     return true; 
    } 
    }); 

} 
+5

Jako uwaga dla niedoświadczonego czytelnika: fragment kodu w tej odpowiedzi może nie być bezpieczny dla twojego przypadku. Ten fragment kodu umożliwia klientowi _any_ aktualizację powiązanej kolekcji (np. Osób). Jeśli używasz nowego interfejsu API kont Meteor (http://docs.meteor.com/#accounts_api), musisz zwrócić czek zalogowanego użytkownika (np. Return userId && doc.owner === userId, gdzie właściciel jest pobranym atrybutem twojej kolekcji). Zobacz rozdział Przykład w http://docs.meteor.com/#allow – dgraziotin

+0

Musiałem umieścić go poza obszarem nazw is_server, aby to działało. – radtek

8

Użyj metody allow() w grupach kolekcji. Ta metoda umożliwia przypisanie dostępu do CRUD.

function adminUser(userId) { 
    var adminUser = Meteor.users.findOne({username:"admin"}); 
    return (userId && adminUser && userId === adminUser._id); 
} 
Lugares.allow({ 
    insert: function(userId, lugar){ 
    return adminUser(userId); 
    }, 
    update: function(userId, lugares, fields, modifier){ 
    return adminUser(userId); 
    }, 
    remove: function (userId, docs){ 
    return adminUser(userId); 
    } 
}); 
+1

Dlaczego "Lugares"? Może to powinien być "Ludzie"? – Artemix

+1

Ta odpowiedź nie jest tak naprawdę związana z pytaniem? –

+0

Dlaczego to zostało odrzucone? Pokazuje trzy funkcje pozwalające na dodanie modułów obsługi. Również ten kod musi działać na kliencie i serwerze, więc jest to bardziej odpowiednie. (Strona klienta wstępnie oblicza wyniki wywoływania tego i pomija serwer w obie strony – MrMowgli

3

Napotkałem ten błąd po usunąłem niezabezpieczone pakiet z mojego projektu.

meteor remove insecure 

Po naprawieniu mojego problemu.

Posts = new Meteor.Collection('posts'); 

Posts.allow({ 
    insert: function(userId, doc) { 
    // only allow posting if you are logged in 
    return !! userId; 
    } 
}); 
+0

konfigurowanie Meteor.methods, a następnie wywoływanie ich na kliencie przez Meteor.call ("nazwa metody", params), naprawi to również odniesienie: https://www.meteor.com/tutorials/blaze/security-with-methods – rdk1992

2

Jeśli tylko testowania projektu, takie jak prosty samouczek todos, można go rozwiązać z dodawaniem pakietu niezabezpieczone

meteor add insecure 
Powiązane problemy