Drupal :personnalisation du flux de travail d'enregistrement des utilisateurs pour communiquer avec une autre application Web

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

  •  22-09-2019
  •  | 
  •  

Question

Je suis nouveau sur Drupal6 et j'ai passé beaucoup de temps à chercher comment implémenter la fonctionnalité suivante sans succès :J'utilise Drupal comme front-end/doc board pour une application web.Je souhaite refléter toutes les créations, mises à jour et suppressions de comptes utilisateur sur cette application Web, c'est-à-direenvoyer le nom d'utilisateur et le mot de passe.

J'ai commencé à coder un petit module implémentant hook_user (http://api.drupal.org/api/function/hook_user/6), mais je me pose encore plusieurs questions concernant ce hook :

1) Je ne trouve pas de doc concernant le $account champs, et je ne sais donc pas comment récupérer le nom d'utilisateur et le mot de passe.
2) Le insert L'opération informe que "Le compte utilisateur est en cours d'ajout".Est-ce déclenché lorsque l'utilisateur interroge un compte ou lorsque la création de son compte en attente a été approuvée ?
3) La gestion des utilisateurs sur la webapp 'esclave' se fait via une interface URL.Je connais seulement le header("Location: http://webapp/users/add?user=martin&pwd=bla") PHP primitif, mais je crains que cela entraîne une redirection, au lieu de simplement atteindre la page cible et de continuer le flux de code.Toute suggestion?

Peut-être que certains d'entre vous ont déjà programmé un tel module, ou auraient des liens vers plus de documentation ?
Merci d'avance,
Martin

Était-ce utile?

La solution 4

Voici le dernier morceau de code qui fonctionne. Notez que le mot de passe est récupéré md5ified, de sorte que la webapp esclave doit être en mesure de le faire ainsi:

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

Remarque: dans notre cas, l'enregistrement requiert l'approbation d'administration. Dans ce cas, il y a un événement « mise à jour ». L'événement « insertion » est déclenchée dès que l'utilisateur interroge un compte.

Informations pour les autres: newbies

  • Lorsque vous essayez de déboguer le code, on peut faire écho cmd $ pour avoir le contenu de cmd $ en haut à gauche writen de la page suivante.
  • Si vous écrivez du code crapy php et obtenez une page blanche lorsque vous utilisez le crochet, vous pouvez ajouter à Drupal / index.php les appels suivants: error_reporting (E_ALL); ini_set ( 'display_errors', TRUE); ini_set ( 'display_startup_errors', TRUE); qui permettent d'avoir les informations de débogage.

        
  • Autres conseils

    Prendre un peu de recul et en regardant le tableau d'ensemble, vous avez plusieurs options.

    1. Utiliser OpenID (il y a un module Drupal de base pour lui) pour les deux sites
    2. Utiliser LDAP (il y a un très bon module contrib Drupal pour lui)
    3. Regardez d'autres modules offrent la connexion utilisateur partage avec d'autres applications (telles que http://drupal.org/project / phpbb ou http://drupal.org/project/moodle ou bien d'autres) d'inspiration
    4. Demandez à votre application web utiliser la table des utilisateurs de Drupal. Ceci est relativement facile que le nom d'utilisateur est là en texte clair et le mot de passe est juste MD5'ed (donc pas de sels ou quoi que ce soit Muddy les eaux).

    Fondamentalement, hook_user a tort.Ce que vous devez faire est d'utiliser hook_form_alter pour modifier le paramètre '#validate' du formulaire de connexion.De cette façon, la validation est transmise à votre fonction dans votre module où vous obtenez $form_values['username'] et $form_values['password'].Vous transmettez cela à votre URL via boucle.S'il renvoie correctement, ne renvoyez rien.S'il ne revient pas, utilisez form_set_error et la connexion sera refusée.

    Bonne chance!

    Afin de récupérer simplement une réponse d'une page, vous pouvez utiliser drupal_http_request ()

    Et une note de sécurité générale, assurez-vous d'authentifier et de valider les demandes entre les applications. Passage des mots de passe en texte clair via les paramètres GET sur HTTP me fait aussi un peu mal au cœur, mais je ne sais pas votre application créée.

    Licencié sous: CC-BY-SA avec attribution
    Non affilié à StackOverflow
    scroll top