2011-12-16 11 views
6

Estoy desarrollando un sitio web que usa un Drupal externo para los artículos y las páginas. El propósito es mostrar los artículos en un sitio web usando solo html/css/js.Inicio de sesión de Drupal a través del servidor de reposo

He agregado un módulo Rest Server al back-end de drupal para que pueda hacer solicitudes http para recuperar los artículos. Ahora recuperando los artículos de los trabajos de back-end de drupal (vea el código a continuación). Restdrupal es el nombre de mi sitio y restendpoint es el nombre del punto final del servidor de ocio (Captian obvio)

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

Ahora quiero mi cliente para poder agregar algunos artículos, por lo que tiene que identificarse. He estado buscando en Internet durante días y he probado un millón de cosas, pero nada funcionó para mí. La última cosa que he probado (con jQuery) fue la siguiente:

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

También he cambiado el puesto en puesto ...

la respuesta que recibo es (sin Mather lo que hago) lo mismo:

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

¿Podría alguien ayudarme? Un cordial saludo, Ceetn

+0

es alguien capaz de aclarar - es este Drupal 6 o 7, ¿y es servicios 2 o 3? ¡ejército de reserva! – ErichBSchulz

+1

Drupal 7 y servicios 3. – Ceetn

Respuesta

24

que habilitar las application/x-www-form-urlencoded tipo de contenido de su extremo de servicio.

Do de la siguiente manera: Servicios -> Editar Recursos -> seleccione la pestaña "Servidor" -> permiten "-urlencoded x-www-formulario de solicitud /" y eso es todo

+0

¡Este fue de hecho el problema! – Ceetn

+0

Este también fue mi problema, ¡gracias por publicar! Esta es la primera vez que configuro servicios y pasé por alto completamente esa configuración. – RevNoah

+0

¿Cómo se permite la autenticación desde diferentes URL? Si mi servicio está en A.com y quiero iniciar sesión desde B.com, ¿es posible y cómo? He intentado usar 'crossDomain: TRUE' en $ .ajax y' JSONP' pero me da el mensaje 'acceso denegado para el usuario anónimo' –

2

Encontré la solución yo mismo. Para aquellos que estén interesados:

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

El código anterior funciona bien cuando paso el nombre de usuario y la contraseña a la url usuario/login.json. Mi pregunta es, cuando usamos jQuery instread de PHP/CURL, ¿se agrega automáticamente valor de cookie al navegador? En mi caso, el código anterior funciona bien y accede al sitio con éxito. Pero, cuando estoy usando lo mismo usando PHP/CURL Request, me dará una respuesta exitosa con Sess ID y Value, pero creo que no está almacenado como Cookie y no me has registrado en el sitio. Cualquier ayuda –

Cuestiones relacionadas