Wie können anonyme Benutzer Beiträge veröffentlichen, während die Integrität des Inhalts erhalten bleibt?

8

Ein kleiner Hintergrund: Wie Sie auf http://charlotte.ebayclassifieds.com sehen , können Sie das Formular ausfüllen und Inhalte einreichen, ohne sich anmelden zu müssen, wenn Sie auf "Anzeige veröffentlichen" klicken und dann eine Kategorie auswählen. Dies geschieht und wird verwaltet, indem Validierungs-E-Mails an das E-Mail-Adressfeld gesendet werden, in denen ein Benutzer beim Klicken seinen Inhalt bearbeiten kann.

Kann eine ähnliche Funktionalität in Drupal erreicht werden? Es macht mir nichts aus, ein Modul zu schreiben, aber bevor ich es tue, möchte ich sicherstellen, dass ich das Rad nicht neu erfinde.

Ich habe eine Drupal-basierte lokale Kleinanzeigen-Website für meine Community unter http://www.gastonia.com . Die Website wächst im anonymen Verkehr, aber nur wenige Benutzer melden sich zum Posten an. Nach ein paar Feedbackschleifen mit der Community sagen fast alle, dass die einzige Eintrittsbarriere darin besteht, sich für ein Konto anzumelden, E-Mails zu lesen, zu validieren, herauszufinden, wie man navigiert, um eine Anzeige zu schalten usw. - in der Tat gibt es 7 Schritte Dies ist erforderlich, bevor eine Anzeige tatsächlich veröffentlicht wird. Es ist zu viel..

Wir haben die Architektur überarbeitet, um sie auf zwei Klicks zu reduzieren - klicken Sie zum Posten und dann zum Speichern. Insbesondere klickt ein Benutzer auf "Inhalt hinzufügen" und das Formular "Knoten / Hinzufügen" wird angezeigt (in der neuen Architektur gibt es jetzt nur noch einen Inhaltstyp). Wenn sie fertig sind, klicken sie auf Speichern.

Ursprünglich habe ich über das Inline-Registrierungsmodul nachgedacht , aber es ist immer noch in DEV und die Logik ist wirklich nicht da, um zu unterstützen, wenn der Benutzer zurückkommt, um erneut mit derselben E-Mail-Adresse zu posten (ohne Anmeldung). Ich könnte es ändern, aber dann schreiben wir wieder ein Modul.

Ich habe auch über Regeln nachgedacht - könnten Regeln ähnliche Funktionen wie die Website von ebayclassifieds verarbeiten oder was versuche ich zu tun? Alles würde auf einer E-Mail basieren, die im Node / Add-Formular (CRUD-Funktionalität) abgelegt ist.

Welche Richtung oder welches Rezept würden Sie vorschlagen, um die Funktionalität zu erreichen? Das ultimative Ziel hierbei ist natürlich, dass Benutzer nicht mehr posten können. Erstellen Sie ein Konto hinter den Kulissen für die zukünftige Verwendung. Ermöglichen Sie die Verwendung des Anon-Formulars auch für Benutzer mit E-Mails, die bereits über Konten verfügen (und weisen Sie den Inhalt entsprechend zu), und behalten Sie gleichzeitig die Sicherheit (vor Spam, Bots) bei, die sich aus der Anmeldung und Authentifizierung eines Kontos durch einen Benutzer ergibt.

EDIT: 4/1/2013 Gisle Hannemyr hat das Anonymous Publishing-Modul wiederbelebt, das dem Erreichen der hier und in anderen Beiträgen beschriebenen Ziele sehr nahe kommt. Bitte nehmen Sie am Thread teil, um Community-Feedback zu geben, wie Sie das Modul fehlerfrei und besser machen können: http://drupal.org/node/1957644

blue928
quelle
Ich habe vor einiger Zeit
paul-m
Wäre OAuth / OpenID zu viel für Ihre Benutzer? Janrain macht das Anmelden zum Kinderspiel.
Capi Etheriel
Ich habe noch nie von Janrain gehört, aber ich mag die Idee, dass Leute andere Konten verwenden, um sich anzumelden. Wie hier auf DSE benutze ich immer mein Google-Konto. So einfach ist das?
blue928

Antworten:

7

Ich denke nicht, dass dies nur mit Regeln möglich ist.

Sie müssen das Übermittlungsformular ändern, um die Bestätigungs-E-Mail-Adresse zu erfassen, und Sie benötigen eine Logik, um Spammer zu verbieten und wiederkehrende Besucher zu erkennen.

Ich bin der Betreuer eines Projekts namens Anonymous Publishing . Es sieht so aus, als ob dieses Modul macht, was Sie wollen.

Es befindet sich noch in der Entwicklung, aber eine Drupal 7-Version wurde an mehreren meiner Produktionsstandorte ohne Probleme verwendet. Bitte probieren Sie es aus.

Vielleicht möchten Sie sich auch die Antworten unter dieser Frage ansehen .

Freie Radikale
quelle
Vielen Dank dafür, werde einige Zeit damit verbringen, den Code zu überprüfen!
blue928
Ich habe unter drupal.org/node/1957644 einen Thread erstellt, um zu sehen, ob wir keine aktive Diskussion über dieses Modul führen können. Danke, dass du das wiederbelebt hast.
blue928
2

Ähnliches habe ich kürzlich bei einem Projekt erreicht, indem ich einen neuen Menü-Rückruf erstellt habe - so etwas wie example.com/anon_user-, der ein Formular bereitstellt, das gleichzeitig als Anmelde- und Registrierungsformular dient. Auf diese Weise kann der Benutzer den Registrierungsprozess sehr schnell durchlaufen ODER sich anmelden, ohne zu viele Aktionen ausführen zu müssen. Es wurde tatsächlich ziemlich gut aufgenommen.

Hier ist ein vereinfachter Code, um dies zu demonstrieren:

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

Validieren Sie es, wie Sie es brauchen:

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

Im Submit-Handler müssen wir herausfinden, ob diese E-Mail bereits vorhanden ist, und versuchen, sie anzumelden. Wenn sie nicht vorhanden ist, versuchen Sie, ein Konto für sie zu erstellen.

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

Dies ist ein ziemlich einfaches Beispiel. Sie können Kennwortanforderungen, Kennwortbestätigung über ein zweites Feld, ein Feld für den Benutzernamen, bessere Warnungen usw. hinzufügen. Je mehr Einschränkungen, desto länger der Vorgang. Beachten Sie dies.

Charlie Schliesser
quelle
2

Es gibt viele Möglichkeiten, wie Sie die "Registrierungshürde" senken können:

  • Verwenden Sie Facebook Connect, um die Anmeldung mit einem Facebook-Konto zu ermöglichen (ich verwende und mag das fboauth- Modul)
  • Es gibt andere soziale Anmeldemodule, die Google, Paypal, Yahoo, OpenID usw. unterstützen.
  • Sie können die Registrierungsoption so ändern, dass keine E-Mail-Bestätigungen erforderlich sind.

Um Ihre letzte Frage zu beantworten:

Welche Richtung oder welches Rezept würden Sie vorschlagen, um die Funktionalität zu erreichen? Das ultimative Ziel hierbei ist natürlich, dass Benutzer nicht mehr posten können. Erstellen Sie ein Konto hinter den Kulissen für die zukünftige Verwendung. Ermöglichen Sie die Verwendung des Anon-Formulars auch für Benutzer mit E-Mails, die bereits über Konten verfügen (und weisen Sie den Inhalt entsprechend zu), und behalten Sie gleichzeitig die Sicherheit (vor Spam, Bots) bei, die sich aus der Anmeldung und Authentifizierung eines Kontos durch einen Benutzer ergibt.

Ich schlage vor, die Funktion "Registrierung anonymer Knoten" zu verwenden (ich kann Code freigeben, wenn Sie möchten). Ich füge einem "Node Add" -Formular die Felder "Name" und "E-Mail-Adresse" hinzu.

Wenn die E-Mail noch nicht vorhanden ist, wird ein neues Benutzerkonto erstellt. Es verwendet den Vornamen, um den Benutzernamen zu erstellen, und fügt bei Bedarf Zahlen hinzu, um ihn eindeutig zu machen.

Das Passwort wird zufällig festgelegt und dem Benutzer angezeigt, nachdem der Knoten mit einem Link zum Ändern des Passworts gesendet wurde.

Außerdem verhindern E-Mail-Bestätigungen nicht, dass sich Spam-Bots anmelden. Ich kann das Spambot- Modul nur empfehlen .

uwe
quelle
2
Sie haben Code erwähnt, den Sie teilen könnten. Dann haben Sie schon ein Modul für Ihren eigenen Gebrauch geschrieben? Ich würde es mir gerne ansehen, wenn Sie es irgendwo online stellen möchten. Vielen Dank!
blue928