drupal:personalizar el flujo de trabajo de registro de usuarios para comunicarse con otra aplicación web

StackOverflow https://stackoverflow.com/questions/2119005

  •  22-09-2019
  •  | 
  •  

Pregunta

Soy nuevo en Drupal6 y pasé mucho tiempo buscando cómo implementar la siguiente característica sin éxito:Utilizo Drupal como front-end/tablero de documentación para una aplicación web.Quiero reflejar toda la creación, actualización y eliminación de cuentas de usuario en esta aplicación web, es decir,enviar nombre de usuario y contraseña.

Empecé a codificar un pequeño módulo que implementaba hook_user (http://api.drupal.org/api/function/hook_user/6), pero todavía tengo varias preguntas relacionadas con este gancho:

1) No puedo encontrar un documento sobre el $account campos y, por lo tanto, no sé cómo recuperar el nombre de usuario y la contraseña.
2) el insert La operación informa que "Se está agregando la cuenta de usuario".¿Esto se activa cuando el usuario consulta una cuenta o cuando se aprueba la creación de su cuenta pendiente?
3) La gestión de usuarios en la aplicación web 'esclava' se realiza a través de una interfaz URL.solo conozco el header("Location: http://webapp/users/add?user=martin&pwd=bla") PHP primitivo, pero me temo que esto generará una redirección, en lugar de simplemente acceder a la página de destino y continuar el flujo de código.¿Cualquier sugerencia?

¿Quizás algunos de ustedes ya programaron un módulo de este tipo o tendrían enlaces para obtener más documentación?
Gracias de antemano,
Martín

¿Fue útil?

Solución 4

Esta es la última pieza de código que funciona. Tenga en cuenta que la contraseña se recupera md5ified, por lo que la aplicación de web esclavo debe ser capaz de hacer lo mismo:

function mirror_registration_user($op, &$edit, &$account, $category = NULL) {
 $cmd = 'http://www.example.com/register?name='.$account->name.'&pass='.$account->pass;

 if($op == 'insert'){
$cmd .= '&op=insert';
drupal_http_request( $cmd );
 }
 else if($op == 'delete'){
$cmd .= '&op=delete';
drupal_http_request( $cmd );
 }
 else if($op == 'after_update'){ // 'update' is a "before update event"
$cmd .= '&op=update';
drupal_http_request( $cmd );
 }
}

Observación: en nuestro caso, el registro requiere la aprobación del administrador. En este caso, hay un evento 'update'. El evento 'insertar' se activa tan pronto como el usuario consulta una cuenta.

Informaciones para otros novatos:

  • Cuando se trata de depurar el código, se puede echo $ cmd para tener el contenido de $ CMD writen en la parte superior izquierda de la página siguiente.
  • Si se escribe el código php crapy y obtener una página en blanco cuando se utiliza el gancho, es posible añadir a Drupal / index.php las siguientes llamadas: error_reporting (E_ALL); ini_set ( 'display_errors', true); ini_set ( 'display_startup_errors', true); que permiten tener información de depuración.

        
  • Otros consejos

    Tomar un paso atrás y mirar el cuadro grande, tiene varias opciones.

    1. Uso de OpenID (hay un módulo básico de Drupal para ello) para ambos sitios
    2. Uso de LDAP (no es realmente un buen módulo contrib Drupal para ello)
    3. vistazo a otros módulos ofrecen compartir la conexión del usuario con otras aplicaciones (como http://drupal.org/project / phpBB o http://drupal.org/project/moodle o muchos otros) para la inspiración
    4. Haga que su aplicación web el uso de tablas de usuario de Drupal. Esto es relativamente fácil ya que el nombre de usuario es allí en texto plano y la contraseña es sólo MD5'ed (por lo que no sales o nada para enturbiar las aguas).

    Básicamente, hook_user está equivocado.Lo que debes hacer es usar hook_form_alter para cambiar el parámetro '#validate' del formulario de inicio de sesión.De esa manera, la validación se pasa a su función en su módulo donde obtiene $form_values['username'] y $form_values['password'].Lo pasas a tu URL a través de rizo.Si regresa correctamente, no devuelve nada.Si no regresa, use form_set_error y negará el inicio de sesión.

    ¡Buena suerte!

    Con el fin de recuperar solo una respuesta de una página, puede utilizar drupal_http_request ()

    Y una nota general de seguridad, asegúrese de que está autenticación y validación de las solicitudes entre aplicaciones. Al pasar las contraseñas en texto plano a través de parámetros GET a través de HTTP también me hace un poco mareado, pero no sé su aplicación para este compromiso.

    Licenciado bajo: CC-BY-SA con atribución
    No afiliado a StackOverflow
    scroll top