Drupal:personalizzare il flusso di lavoro di registrazione dell'utente per comunicare con un'altra webapp

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

  •  22-09-2019
  •  | 
  •  

Domanda

Sono nuovo in Drupal6 e ho passato molto tempo a cercare come implementare la seguente funzionalità senza successo:Utilizzo Drupal come front-end/scheda di documentazione per un'app Web.Voglio eseguire il mirroring di tutta la creazione, l'aggiornamento e l'eliminazione degli account utente su questa app Web, ad es.inviare nome utente e password.

Ho iniziato a codificare un piccolo modulo di implementazione hook_user (http://api.drupal.org/api/function/hook_user/6), ma mi sto ancora interrogando su diverse domande riguardanti questo hook:

1) Non riesco a trovare un documento riguardante il $account campi e quindi non so come recuperare il nome utente e la password.
2) Il insert l'operazione informa che "L'account utente è stato aggiunto".Viene attivato quando l'utente interroga un account o quando la creazione del suo account in sospeso è stata approvata?
3) La gestione degli utenti sulla webapp 'slave' avviene tramite un'interfaccia URL.Conosco solo il header("Location: http://webapp/users/add?user=martin&pwd=bla") PHP primitivo, ma temo che questo effettuerà un reindirizzamento, invece di colpire semplicemente la pagina di destinazione e continuare il flusso del codice.Qualche suggerimento?

Forse alcuni di voi hanno già programmato un modulo del genere o avrebbero collegamenti per ulteriore documentazione?
Grazie in anticipo,
Martino

È stato utile?

Soluzione 4

Ecco l'ultimo pezzo di codice che funziona.Tieni presente che la password viene recuperata md5ified, quindi anche la webapp slave deve essere in grado di farlo:

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

Nota:nel nostro caso, la registrazione richiede l'approvazione dell'amministratore.In questo caso, c'è un evento di "aggiornamento".L'evento 'inserisci' viene attivato non appena l'utente interroga un account.

Informazioni per gli altri neofiti:

  • Quando si tenta di eseguire il debug del codice, è possibile echo $cmd per avere il contenuto di $cmd scritto in alto a sinistra nella pagina seguente.
  • Se scrivi un codice php scadente e ottieni una pagina vuota quando usi l'hook, puoi aggiungere a Drupal/index.php le seguenti chiamate:segnalazione_errori(E_ALL);ini_set('display_errors', TRUE);ini_set('display_startup_errors', TRUE);che consentono di avere informazioni di debug.

  • Altri suggerimenti

    Facendo un passo indietro e guardando il quadro generale, hai diverse opzioni.

    1. Usa OpenID (c'è un modulo Drupal principale per questo) per entrambi i siti
    2. Usa LDAP (c'è un ottimo modulo contrib Drupal per questo)
    3. Guarda altri moduli che offrono la condivisione dell'accesso utente con altre app (come http://drupal.org/project/phpbb O http://drupal.org/project/moodle o molti altri) per ispirazione
    4. Fai in modo che la tua app Web utilizzi la tabella utente di Drupal.Questo è relativamente semplice poiché il nome utente è presente in testo normale e la password è solo MD5 (quindi niente sali o altro per confondere le acque).

    Fondamentalmente, hook_user è sbagliato.Quello che devi fare è utilizzare hook_form_alter per modificare il parametro '#validate' del modulo di accesso.In questo modo, la convalida viene passata alla tua funzione nel modulo dove ottieni $form_values['username'] e $form_values['password'].Lo trasmetti al tuo URL tramite arricciare.Se ritorna correttamente, non restituire nulla.Se non ritorna, usa form_set_error e negherà l'accesso.

    Buona fortuna!

    Per recuperare semplicemente una risposta da una pagina, puoi utilizzare drupal_http_request()

    E una nota generale sulla sicurezza: assicurati di autenticare e convalidare le richieste tra le applicazioni.Anche il passaggio delle password in testo semplice tramite parametri GET su HTTP mi mette un po' di nausea, ma non conosco la configurazione della tua applicazione.

    Autorizzato sotto: CC-BY-SA insieme a attribuzione
    Non affiliato a StackOverflow
    scroll top