2011-12-16 28 views
6

Sto sviluppando un sito Web che utilizza Drupal esterno per gli articoli e le pagine. Lo scopo è mostrare gli articoli in un sito Web usando solo html/css/js.Accesso Drupal tramite server Rest

Ho aggiunto un modulo Rest Server al back-end drupal in modo da poter fare richieste http per ritirare gli articoli. Ora ritirare gli articoli dal back-end drupal funziona (vedi il codice sotto). Restdrupal è il nome del mio sito e restendpoint è il nome dell'endpoint del server di riposo (Captian Obvious)

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

Ora voglio che il mio cliente di essere in grado di aggiungere alcuni articoli, quindi ho bisogno prima effettuare il login. Ho cercato su internet da giorni e ho provato un milione di cose, ma niente ha funzionato per me. L'ultima cosa che ho provato (con jQuery) era questa:

$.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 
    } 
}); 

Ho anche cambiato il mettere in POST ...

La risposta mi sto è (senza Mather quello che faccio) lo stesso:

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

Potrebbe piacere qualcuno che mi aiuti? Cordiali saluti, Ceetn

+0

C'è qualcuno in grado di chiarire - è questo Drupal 6 o 7, ed è servizi 2 o 3? ta! – ErichBSchulz

+1

Drupal 7 e servizi 3. – Ceetn

risposta

24

Devi abilitare application/x-www-form-urlencoded tipo di contenuto del vostro endpoint del servizio.

procedere come segue: Servizi -> Modifica Risorse -> selezionare la scheda "Server" -> Attiva "application/x-www-form-urlencoded" e questo è tutto

+0

Questo era davvero il problema! – Ceetn

+0

Questo era il mio problema, grazie per aver pubblicato! Questa è la prima volta che ho impostato i servizi e ho completamente ignorato tale impostazione. – RevNoah

+0

Come consentire l'autenticazione da URL diversi? Se il mio servizio è su A.com e desidero accedere da B.com è possibile e come? Ho provato a usare 'crossDomain: TRUE' in $ .ajax e' JSONP', ma mi dia il messaggio 'accesso negato per utente anonimo' –

2

Ho trovato la soluzione da solo. Per coloro che sono interessati:

$.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

Sopra il codice funziona correttamente quando sto passando nome utente e password per utente/login.json url. La mia domanda è, quando usiamo jQuery instread di PHP/CURL, si aggiunge automaticamente il valore del cookie al browser? Nel mio caso il codice di cui sopra sta funzionando bene e accedi al sito con successo. Ma, quando sto usando lo stesso usando PHP/CURL Request mi darà una risposta di successo con Sess ID e Value ma penso che non venga memorizzato come Cookie e non mi abbia effettuato l'accesso al sito? Qualsiasi aiuto –

Problemi correlati