Login y registro de usuarios en Drupal con Python vía XMLRPC

Para este propósito necesitamos tener un rol administrador con todos los permisos asignados. El usuario que tenga asignado este rol será con el que iniciemos sesión en Python y el que tendrá poder para registrar usuarios. A partir de aquí, voy a suponer una instalación limpia de Drupal. Drupal tiene módulos que proporcionan un servidor XMLRPC y una serie de servicios Web impecables que expone al exterior. Veamos los pasos para preparar Drupal para este cometido.

  1. Instalar la herramienta de descarga y habilitación sencilla de módulos Drupal
    1. neonigma@neonigma-desktop:~/Descargas$ sudo apt-get install drush
  2. Descargar y habilitar el módulo Services
    1. neonigma@neonigma-desktop:/opt/lampp/htdocs/drupal/modules$ drush dl services -r modules
    2. Project services (6.x-2.2) downloaded to /opt/lampp/htdocs/drupal/modules/services.                                                                                                                  [success]
    3.  
    4. neonigma@neonigma-desktop:/opt/lampp/htdocs/drupal/modules$ drush en services
    5. The following projects will be enabled: services
    6. Do you really want to continue? (y/n): y
    7. services was enabled successfully.                                                                                                                                                                   [ok]

    En Drupal vamos a Administrar -> Construcción del sitio -> Módulos. Activamos los siguientes módulos y pulsamos en Guardar configuración:

    MUY IMPORTANTE. En Drupal vamos ahora a Administrar -> Administración de usuarios -> Opciones de usuario y DESACTIVAMOS la casilla Es necesaria la verificación por correo cuando un visitante crea una cuenta. Pulsamos el botón Guardar la configuración del final de la página. La siguiente imagen muestra cómo debe quedar la configuración:

    A continuación, vamos a Administrar -> Construcción del sitio -> Services, pulsamos en la pestaña Opciones y en el desplegable Authentication module escogemos Key authentication. A continuación desmarcamos Use keys y dejamos marcado Use sessid. Este párrafo es lo más importante, el que permite la magia. La siguiente imagen muestra cómo debe quedar la configuración:

    Por último, vamos a asignar todos los permisos correctamente. Vamos a Administrar -> Administración de usuarios -> Permisos. En la columna de administrador debemos haber marcado todos los checkbox, dando permiso al administrador para hacer lo que desee en el portal.

    Con esto, ya tendríamos Drupal preparado para el acceso a los distintos servicios Web. Para comprobarlo, vamos Administrar -> Construcción del sitio -> Services y hacemos clic en el enlace XMLRPC – /services/xmlrpc. La URL que se nos abra en el navegador será nuestra URL de conexión a los servicios Web. En mi caso de ejemplo, la URL es http://localhost/drupal/services/xmlrpc

    Ahora, sólo tenemos que escribir un pequeño programa de testing como este para aprovechar estos servicios:

    1. #! /usr/bin/python
    2. import os.path, sys, xmlrpclib, socket
    3.  
    4. config = {
    5.   'url': 'http://localhost/drupal/services/xmlrpc',
    6.   'username': 'admin',
    7.   'password': 'admin',
    8. }
    9.  
    10. # Make initial connection to service
    11. server = xmlrpclib.ServerProxy(config['url'], allow_none=True);
    12.  
    13. try:
    14.     server.system.listMethods() # si podemos listar las operaciones del servicio web, hemos conectado al servidor
    15. except xmlrpclib.ProtocolError, socket.error:
    16.     print 'No se puede conectar al servidor'
    17. except EOFError:
    18.     exit(1)
    19. else:
    20.     try:
    21.         connection = server.system.connect(); # hacer uso de la funcion connect del servicio web System
    22.     except:
    23.         print "Error en la conexion. Codigo de error: %d" % err.faultCode
    24.         print "%s" % err.faultString.encode('utf-8','ignore')
    25.     else:
    26.         try:
    27.             session = server.user.login(connection['sessid'], config['username'], config['password']); # usar funcion login del servicio web User
    28.  
    29.         except xmlrpclib.Fault, err:
    30.             print "Error en el inicio de sesion. Codigo de error: %d" % err.faultCode
    31.             print "%s" % err.faultString.encode('utf-8','ignore')
    32.         else:
    33.             sessid = session['sessid']; # necesario obtener el sessid, es nuestra key para identificarnos despues
    34.             user = session['user'];
    35.  
    36.             try:
    37.                 # construimos los datos del nuevo usuario y le entregamos la key
    38.                 user_data = {
    39.                     'sessid': session['sessid'],
    40.                     'name': 'enigma',
    41.                     'mail': 'enigma@enigma.es',
    42.                     'pass': 'enigma',
    43.                 }
    44.                 print session # datos del administrador
    45.                 result = server.user.save(sessid, user_data) # intentar registrar nuestro usuario, no olvidar la key
    46.                 print result # resultado del registro de usuario
    47.             except xmlrpclib.Fault, err:
    48.                 print "Error en el registro de usuario. Codigo de error: %d" % err.faultCode
    49.                 print "%s" % err.faultString.encode('utf-8','ignore')        
    50.             else:
    51.                 print "Se ha registrado correctamente al usuario"

    El resultado de la ejecución de este código es el siguiente:

    1. neonigma@neonigma-desktop:/opt/lampp/htdocs/drupal$ python register.py
    2. u003igf16uvf9fnhaspe3v36e0
    3. {'sort': '0', 'status': '1', 'picture': '', 'uid': '3', 'language': 'es', 'created': '1290805507', 'roles': {'3': 'usuario administrador', '2': 'authenticated user'}, 'signature': '', 'init': 'admin@admin.fake', 'access': '1290858423', 'signature_format': '0', 'theme': '', 'form_build_id': 'form-ac8a1d5923bb603b231df3f65fc8d38f', 'mode': '0', 'pass': '21232f297a57a5a743894a0e4a801fc3', 'threshold': '0', 'mail': 'admin@admin.fake', 'login': 1290858449, 'data': 'a:1:{s:13:"form_build_id";s:37:"form-ac8a1d5923bb603b231df3f65fc8d38f";}', 'timezone': '3600', 'name': 'admin'}
    4. 9
    5. Se ha registrado correctamente al usuario

    Si vamos a Administrar -> Administración de usuarios -> Usuarios veremos nuestro usuario perfectamente creado. Además, podemos iniciar sesión con él.

    A 3 personas les gusta esta entrada

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *