¿Alguien tiene un inicio de sesión REST que funcione en Drupal 8?
Esto es lo que probé.
POST /user/login HTTP/1.1
Host: 8.d8.local
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: http://nikhilmohan.in
Cache-Control: no-cache
name=test&pass=password&form_id=user_login_form
Me devuelve HTML en lugar de JSON .
Así es como puede iniciar sesión a través de JavaScript para Drupal 8 REST:
Drupal 8.2 y más allá
http://example.com/user/login?_format=json
application/json
{ "name": "admin", "pass": "myPassword" }
200 OK
Esto iniciará sesión correctamente a través de la autenticación de cookies y devolverá un resultado similar a este:
Creé un módulo contrib llamado jDrupal que hace que sea muy fácil iniciar sesión con JavaScript (entre otras cosas):
Antes de Drupal 8.2
http://example.com/user/login
application/x-www-form-urlencoded
name=admin&pass=myPassword&form_id=user_login_form
200 OK | 303 See Other
Enviarás los datos en la URL como una cadena de consulta. El resultado será HTML, por lo que no le devolverá nada útil, pero iniciará sesión correctamente a través de la autenticación de cookies.
fuente
La autenticación RESTful significa enviar autenticación con cada solicitud porque no tiene estado. El ejemplo proporcionado por Drupal 8 core es el módulo de autenticación básica, que permite enviar credenciales de autenticación para una solicitud HTTP a través de la autenticación HTTP básica, dado a un usuario con permiso para acceder al contenido a través de GET.
Ejemplo RESTful
Rizo:
curl -vvv -k -H "Authorization: Basic test:password" http://8.d8.local/node/1?_format=json
Sin embargo, esto generalmente no es lo suficientemente bueno. Los simple_oauth y oauth módulos contrib proporcionan OAuth 2 y 1 de soporte, respectivamente., Con el que una solicitud HTTP se puede hacer con la autenticación OAuth tokens basado en el trabajo OAuth flujos describe en dichos módulos.
Pero la verdadera pregunta parece ser
¿Cómo inicio sesión a través de una API de servicios web?
No hay un módulo Drupal 8 estable para hacerlo, pero el módulo Servicios proporciona métodos para crear acciones no RESTful y acciones específicas como "inicio de sesión".
Lo siguiente funciona después de configurar un punto final llamado "api":
Rizo:
curl -vvv -k -H "Content-Type: application/json" -H "Accept: application/json" -d '{"username": "test", "password": "password"}' http://8.d8.local/api/user/login
Esto devuelve la identificación y el nombre de la sesión JSON (también establecido en el encabezado Set-Cookie de la respuesta).
y también puede iniciar sesión con Jquery ajax call con el siguiente fragmento
fuente
Versión Drupal Core: 8.x-4.x
Primero debe habilitar el servicio de inicio de sesión de usuario, esto se puede lograr de muchas maneras, prefiero usar el módulo REST UI .
Vaya a / admin / config / services / rest y active el recurso User Rest.
Una vez habilitado, puede ir a / admin / config / services / rest / resource / entity% 3Auser / edit haciendo clic en Editar junto al recurso de usuario . Asegúrese de habilitar el método GET .
Ahora que tiene todo configurado, puede comenzar a usar el servicio ejecutando este comando en la terminal o usando cualquier aplicación para solicitudes curl como: clientes Postman y Restlet .
NOTA : El token CSRF se puede obtener de: / rest / session / token
Los objetos de retorno son los siguientes:
ÉXITO :
FALLO :
fuente
Utilizo el inicio de sesión RESTFul personalizado en drupal 8 pero no con cookie. Es para una aplicación móvil y cada vez que necesito información, uso una autenticación simple:
Desde Drupal 8.2x necesitamos 2 archivos en un módulo:
Puedes agregar más métodos como DELETE / POST
Entonces necesitamos el archivo
No olvide ir al derecho del usuario para aceptar el método GET / POST o cualquier cosa que haya agregado en su configuración.
Con eso puede crear cada archivo REST personalizado para cada entidad personalizada.
Y en mi js: no olvides llamar
para obtener token
fuente
Siguiendo la respuesta de @ tyler.frankenstein, si desea implementar un formulario de inicio de sesión con Ajax, puede usar, por ejemplo, jQuery.
1. Obtenga un token CSRF
Necesitamos hacer una solicitud POST al
user/login
punto final de la API de Drupal 8. Este punto final (considerado como un "método no seguro") requiere que envíe un token CSRF.El primer paso es obtener este token enviando una solicitud AJAX al
rest/session/token
punto final:NÓTESE BIEN:
callback
parámetro es una función de devolución de llamada que se llamará cuando se recupere el token CSRFDrupal.url
función para obtener la URL base del sitioEste token debe enviarse con un
X-CSRF-Token
encabezado.2. Iniciar sesión
Considere el siguiente HTML:
... y el código jQuery correspondiente:
Este código ha sido probado con éxito con Drupal 8.3.
¡Espero que esto ayude!
fuente
Sí, claro, hice un blog sobre cómo probarlo con cartero , y también otro sobre cómo configurar su sitio drupal .
En este proyecto , inicié sesión en Drupal con angular, utilizando el módulo Simple OAuth para el token.
fuente