In che modo è possibile pubblicare utenti anonimi pur mantenendo l'integrità dei contenuti?


8

Un po 'di storia: come vedi su http://charlotte.ebayclassifieds.com , se fai clic su "pubblica un annuncio" e poi scegli una categoria, puoi compilare il modulo e inviare il contenuto senza doverti iscrivere. Tutto questo viene fatto e gestito inviando e-mail di convalida al campo dell'indirizzo e-mail che, quando viene cliccato, consente a un utente di manipolarne il contenuto.

È possibile ottenere funzionalità simili in Drupal. Non mi dispiace scrivere un modulo, ma prima di farlo, voglio assicurarmi di non reinventare la ruota.

Ho un sito di annunci locali basato su Drupal per la mia comunità all'indirizzo http://www.gastonia.com . Il sito sta crescendo con traffico anonimo, ma pochi utenti si stanno iscrivendo per pubblicare. Dopo un paio di feedback con la community, quasi tutti affermano che l'unico ostacolo all'accesso è la registrazione di un account, la verifica della posta elettronica, la convalida, la comprensione di come navigare per pubblicare un annuncio, ecc. necessario passare prima che un annuncio venga effettivamente pubblicato. È troppo..

Abbiamo rielaborato l'architettura per riuscire a ridurla a due clic: fai clic per pubblicare, quindi fai clic per salvare. Più specificamente, un utente fa clic su "Aggiungi contenuto" e si apre il nodo / aggiungi modulo (ora esiste un solo tipo di contenuto nella nuova architettura); Quindi, quando hanno finito, fanno clic su Salva.

Inizialmente ho pensato al modulo Inline Registration , ma è ancora in DEV e la logica non è davvero lì per supportare se l'utente torna a postare di nuovo con lo stesso indirizzo e-mail (senza effettuare il login). Potrei modificarlo, ma poi torniamo a scrivere un modulo.

Ho anche pensato alle Regole: le regole potrebbero gestire funzionalità simili a quelle del sito ebayclassifieds o cosa sto cercando di fare? Sarebbe tutto basato su un messaggio di posta elettronica archiviato nel modulo nodo / aggiungi (funzionalità CRUD).

Quale direzione o ricetta suggeriresti per raggiungere la funzionalità? Naturalmente l'obiettivo finale qui è quello di consentire agli utenti di pubblicare post; creare un account dietro le quinte per un utilizzo futuro; consentire l'utilizzo del modulo anon anche per gli utenti con e-mail che dispongono già di account (e assegnano il contenuto di conseguenza.) il tutto mantenendo la sicurezza (da spam, bot) offerta dall'iscrizione e dall'autenticazione di un utente da parte di un utente.

EDIT: 4/1/2013 Gisle Hannemyr ha rilanciato il modulo di pubblicazione anonima che è molto vicino al raggiungimento degli obiettivi descritti qui e in altri post. Partecipa al thread per fornire un feedback della community su come rendere il modulo libero e migliore: http://drupal.org/node/1957644



OAuth / OpenID sarebbe troppo per i tuoi utenti? Janrain rende semplicissimo il login.
Capi Etheriel,

Non ho mai sentito parlare di Janrain, ma mi piace l'idea che le persone utilizzino altri account per accedere. Come qui su DSE, utilizzo sempre il mio account Google. Così semplice?
blue928,

Risposte:


7

Non credo sia possibile solo con le regole.

È necessario modificare il modulo di invio per acquisire l'indirizzo e-mail di verifica e inoltre è necessaria una logica per vietare gli spammer e riconoscere i visitatori di ritorno.

Sono il manutentore di un progetto chiamato Anonymous Publishing . Sembra che questo modulo faccia quello che vuoi.

È ancora in fase di sviluppo, ma una versione di Drupal 7 è stata utilizzata in molti dei miei siti di produzione senza problemi. Per favore controlla.

Potresti anche voler guardare le risposte sotto questa domanda .


Grazie per questo, passeremo un po 'di tempo a controllare il codice!
blue928,

Ho creato un thread su drupal.org/node/1957644 per vedere se non possiamo ottenere una discussione attiva su quel modulo. Grazie per averlo rianimato.
blue928

2

Ho ottenuto qualcosa di simile a questo in un recente progetto creando un nuovo callback di menu - qualcosa di simile example.com/anon_user- che fornisce un modulo che funge anche da login e un modulo di registrazione. Ciò consente all'utente di eseguire molto rapidamente il processo di registrazione o di accedere senza far eseguire troppe azioni. In realtà è stato ricevuto abbastanza bene.

Ecco un po 'di codice semplificato per dimostrarlo:

function example_form($form, &$form_state) {
  // Don't let authenticated users use this form.
  global $user;
  if ($user->uid != 0) {
    return MENU_ACCESS_DENIED;
  }

  // Let the user know what they can do.
  $form['intro']['#markup'] = "Already have an account? Login here. Don't have an account? Enter your email address and create a password and we'll setup an account for you.");

  $form['login'] = array(
    '#type' => 'fieldset',
    'user_email' => array(
      '#type' => 'textfield',
      '#required' => TRUE,
      '#title' => t('E-mail Address'),
    ),
    'user_pass' => array(
      '#type' => 'password',
      '#required' => TRUE,
      '#title' => t('Password'),
    ),
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Continue',
  );

  return $form;
}

Convalidalo comunque ti serve:

function example_form_validate(&$form, &$form_state) {
  if (!valid_email_address($form_state['values']['user_email'])) {
    form_set_error('user_email', 'You entered an invalid email address.');
  }
}

Nel gestore di invio, dobbiamo capire se questa email esiste già e tentare di accedervi. Se non esiste, prova a creare un account per loro.

function example_form_submit(&$form, &$form_state) {
  global $user;

  // Does this account already exist?
  if ($user_name = db_query("SELECT name FROM {users} WHERE mail = :mail", array(':mail' => $form_state['values']['user_email']))->fetchField()) {
    // Attempt to log them in.
    if ($account_id = user_authenticate($user_name, $form_state['values']['user_pass'])) {
      drupal_set_message('You have been logged in.');
      $user = user_load($account_id);
    } else {
      drupal_set_message('You have an account here, but you entered the wrong password.', 'error');
    }
  } 

  // Create the account.
  else {
    // Use their email address as their username. Or handle this with a more complex login form.
    $account_name = str_replace('@', '_', $form_state['values']['user_email']);
    $account = user_save(null, array(
      'name' => $account_name,
      'pass' => $form_state['values']['user_pass'],
      'mail' => $form_state['values']['user_email'],
      'init' => $form_state['values']['user_email'],
      'status' => 1,
      'access' => REQUEST_TIME,
    ));
    // Log 'em in to their new account.
    drupal_set_message('Your account has been created and you have been successfully logged in!');
    );
    $user = user_load(user_authenticate($account->name, $form_state['values']['user_pass']));
  }
}

Questo è un esempio piuttosto semplice. È possibile aggiungere requisiti di password, conferma della password tramite un secondo campo, un campo nome utente, avvisi migliori, ecc. Maggiore è il numero di restrizioni, più lungo è il processo, quindi è qualcosa da tenere a mente.


2

Esistono molti modi per ridurre l'abbandono della "registrazione":

  • uso Facebook Connect per consentire l'accesso con un account Facebook (io uso e mi piace il modulo fboauth )
  • ci sono altri moduli di accesso social che supportano google, paypal, yahoo, openid, ecc.
  • puoi modificare l'opzione di registrazione per non richiedere conferme via email.

Per rispondere alla tua ultima domanda:

Quale direzione o ricetta suggeriresti per raggiungere la funzionalità? Naturalmente l'obiettivo finale qui è quello di consentire agli utenti di pubblicare post; creare un account dietro le quinte per un utilizzo futuro; consentire l'utilizzo del modulo anon anche per gli utenti con e-mail che dispongono già di account (e assegnano il contenuto di conseguenza.) il tutto mantenendo la sicurezza (da spam, bot) offerta dall'iscrizione e dall'autenticazione di un utente da parte di un utente.

Suggerisco di utilizzare una funzione di "registrazione del nodo anonimo" (se lo desideri, posso condividere il codice). Aggiungo i campi "nome" e "indirizzo e-mail" a un modulo "aggiungi nodo".

Se l'e-mail non esiste già, verrà creato un nuovo account utente. Utilizza il nome per creare il nome utente e aggiunge numeri se necessario per renderlo univoco.

La password viene impostata in modo casuale e visualizzata all'utente dopo aver inviato il nodo con un collegamento per modificare la password.

Inoltre, le conferme via email non impediranno la registrazione ai robot spam. Consiglio vivamente il modulo spambot .


2
Hai menzionato il codice che potresti condividere. Quindi hai già scritto un modulo per il tuo uso personale? Mi piacerebbe dare un'occhiata se vuoi metterlo online da qualche parte. Grazie!
blue928,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.