2011-12-16 17 views
6

Zajmuję się tworzeniem strony internetowej, która używa zewnętrznego Drupala do artykułów i stron. Celem jest wyświetlenie artykułów w witrynie przy użyciu html/css/js.Logowanie do Drupala przez serwer Rest

Dodałem moduł Rest Server do drupala back-end, dzięki czemu mogę wykonywać żądania http dla odzyskania artykułów. Teraz odzyskiwanie artykułów z drupalskich prac back-endowych (zobacz poniższy kod). Restdrupal to nazwa mojej strony i restendpoint to nazwa serwera rekreacyjne końcowego użytkownika (Captian Obvious)

$.ajax({ 
    url : "http://127.0.0.1/restdrupal/restendpoint/node.json", 
    dataType : 'json', 
    success : function(data) { 
       //further code 
    } 
}); 

Teraz chcę mój klient, aby móc dodać kilka artykułów, więc muszę się najpierw zalogować. Od wielu dni szukam internetu i próbowałem milionów rzeczy, ale nic nie działało dla mnie. Najnowszy rzeczą próbowałem (z jQuery) był następujący:

$.ajax({ 
    url : "http://127.0.0.1/restdrupal/restendpoint/user/login", 
    dataType:'application/json', 
    type : 'PUT', 
    data : 'Name=myusername&Pass=mypassword', 
    success : function(data) { 
     //further code 
    }, 
    error:function(data){ 
      //Error handling 
    } 
}); 

Ja również zmienił oddany do POST ...

Odpowiedź Dostaję jest (no Mather, co robię) tak samo:

406 Not Acceptable: Unsupported request content type application/x-www-form-urlencoded 

Proszę kogoś, kto mi pomoże? Pozdrowienia, Ceetn

+0

jest ktoś w stanie wyjaśnić - jest to Drupal 6 lub 7 i czy to usługa 2 czy 3? ta! – ErichBSchulz

+1

Drupal 7 i usługi 3. – Ceetn

Odpowiedz

24

Musisz włączyć application/x-www-form-urlencoded typ zawartości swojego punktu końcowego usługi.

wykonaj następujące czynności: Usługi -> Edit Zasoby -> wybierz zakładkę "Serwer" -> enable "application/x-www-form-urlencoded" i to

+0

To był naprawdę problem! – Ceetn

+0

To był także mój problem, dzięki za publikację! Po raz pierwszy skonfigurowałem usługi i całkowicie przeoczyłem to ustawienie. – RevNoah

+0

Jak zezwolić na uwierzytelnianie z innego adresu URL? Jeśli moja usługa znajduje się na A.com i chcę się zalogować z B.com to jest to możliwe i jak? Próbowałem użyć 'crossDomain: TRUE' w $ .ajax i' JSONP' ale daj mi wiadomość 'odmowa dostępu dla anonimowego użytkownika' –

2

Sam znalazłem rozwiązanie. Dla tych, którzy są zainteresowani:

$.ajax({ 
    url : "http://127.0.0.1/restdrupal/restpoint/user/login.json", 
    type : 'post', 
    data : 'username=' + encodeURIComponent(username) + '&password=' + encodeURIComponent(password), 
    dataType : 'json', 
    error : function(data) { 
      //error code 
    }, 
    success : function(data) { 
     //success code 
    } 
}); 
+1

Powyższy kod działa poprawnie, gdy przekazuję nazwę użytkownika i hasło do adresu URL użytkownika/login.json. Moje pytanie brzmi: kiedy użyjemy jQuery w PHP/CURL automatycznie doda wartość cookie do przeglądarki? W moim przypadku powyższy kod działa poprawnie i zaloguj się do witryny pomyślnie. Ale, kiedy używam tego samego przy użyciu żądania PHP/CURL, dostanę odpowiedź na pytanie o Sess ID i wartość, ale myślę, że nie zostałem zapisany jako plik cookie i nie zalogowałem się na stronie? Każda pomoc –

Powiązane problemy