Comment les utilisateurs anonymes peuvent-ils être autorisés à publier tout en préservant l'intégrité du contenu?

8

Un peu d'histoire: comme vous le voyez sur http://charlotte.ebayclassifieds.com , si vous cliquez sur «publier une annonce» puis choisissez une catégorie, vous pouvez remplir le formulaire et soumettre du contenu sans avoir à vous inscrire. Tout cela est fait et géré en envoyant des e-mails de validation au champ d'adresse e-mail qui, lorsque vous cliquez dessus, permettent à un utilisateur de manipuler son contenu.

Des fonctionnalités similaires peuvent-elles être obtenues dans Drupal. Cela ne me dérange pas d'écrire un module, mais avant de le faire, je veux m'assurer de ne pas réinventer la roue.

J'ai un site de petites annonces locales basé sur Drupal pour ma communauté à http://www.gastonia.com . Le site croît en trafic anonyme, mais peu d'utilisateurs s'inscrivent pour poster. Après quelques boucles de rétroaction avec la communauté, presque tout le monde dit que la seule barrière à l'entrée est de créer un compte, de vérifier les e-mails, de valider, de comprendre comment naviguer pour publier une annonce, etc. - en effet, il y a 7 étapes nécessaire avant de publier une annonce. C'est trop..

Nous avons retravaillé l'architecture pour pouvoir la réduire à deux clics - cliquez pour publier, puis cliquez pour enregistrer. Plus précisément, un utilisateur clique sur «Ajouter du contenu» et le formulaire nœud / ajout apparaît (il n'y a désormais qu'un seul type de contenu dans la nouvelle architecture); Ensuite, lorsqu'ils ont terminé, ils cliquent sur enregistrer.

À l'origine, je pensais au module d' enregistrement en ligne , mais il est toujours dans DEV et la logique n'est vraiment pas là pour prendre en charge si l'utilisateur revient pour poster à nouveau avec la même adresse e-mail (sans connexion). Je pourrais le modifier, mais nous revenons à l'écriture d'un module.

J'ai également pensé aux règles - les règles pourraient-elles gérer des fonctionnalités similaires à celles du site ebayclassifieds ou ce que j'essaie de faire? Tout serait basé sur un e-mail déposé dans le formulaire nœud / ajout (fonctionnalité CRUD).

Quelle direction ou recette suggéreriez-vous pour réaliser la fonctionnalité? Bien sûr, le but ultime ici est de permettre aux utilisateurs anon de publier; créer un compte dans les coulisses pour une utilisation future; permettre l'utilisation du formulaire anon même pour les utilisateurs avec des e-mails qui ont déjà des comptes (et attribuer du contenu en conséquence.) tout en maintenant la sécurité (contre le spam, les bots) qui est offerte en demandant à un utilisateur de s'inscrire et d'authentifier un compte.

EDIT: 4/1/2013 Gisle Hannemyr a relancé le module de publication anonyme qui est très proche d'atteindre les objectifs décrits ici et dans d'autres articles. Veuillez participer au fil de discussion pour fournir des commentaires de la communauté sur la façon de rendre le module sans bogue et meilleur: http://drupal.org/node/1957644

blue928
la source
J'ai posé une question similaire il y a quelque temps: drupal.stackexchange.com/questions/25194/…
paul-m
OAuth / OpenID serait-il trop pour vos utilisateurs? Janrain facilite la connexion.
Capi Etheriel
Je n'ai jamais entendu parler de Janrain, mais j'aime l'idée que les gens utilisent d'autres comptes pour se connecter. Comme ici sur DSE, j'utilise toujours mon compte Google. Aussi simple que cela?
blue928

Réponses:

7

Je ne pense pas que cela soit possible avec des règles seules.

Vous devez modifier le formulaire de soumission afin de capturer l'adresse e-mail de vérification, et vous avez également besoin d'une logique pour interdire les spammeurs et reconnaître les visiteurs qui reviennent.

Je suis le responsable d'un projet nommé Anonymous Publishing . Il semble que ce module fasse ce que vous voulez.

Il est toujours en développement, mais une version Drupal 7 a été utilisée sur plusieurs de mes sites de production sans aucun problème. Vérifie s'il te plaît.

Vous pouvez également consulter les réponses sous cette question .

Radical gratuit
la source
Merci pour cela, passerez un peu de temps à vérifier le code!
blue928
J'ai créé un fil à drupal.org/node/1957644 pour voir si nous ne pouvons pas avoir une discussion active sur ce module. Merci d'avoir relancé ça.
blue928
2

J'ai réalisé quelque chose de similaire à cela sur un projet récent en créant un nouveau rappel de menu - quelque chose comme example.com/anon_user- qui fournit un formulaire qui se double d'un identifiant et d'un formulaire d'inscription. Cela permet à l'utilisateur de passer très rapidement par le processus d'enregistrement OU de se connecter sans lui faire effectuer trop d'actions. Il a en fait été assez bien reçu.

Voici un code simplifié pour le démontrer:

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

Validez-le selon vos besoins:

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

Dans le gestionnaire de soumission, nous devons déterminer si cet e-mail existe déjà et tenter de les connecter. S'il n'existe pas, essayez de créer un compte pour eux.

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

Ceci est un exemple assez simple. Vous pouvez ajouter des exigences de mot de passe, une confirmation de mot de passe via un deuxième champ, un champ de nom d'utilisateur, de meilleurs avertissements, etc. Plus il y a de restrictions, plus le processus est long, c'est donc quelque chose à garder à l'esprit.

Charlie Schliesser
la source
2

Il existe de nombreuses façons de réduire l’obstacle à l’enregistrement:

  • utiliser Facebook connect pour permettre la connexion avec un compte facebook (j'utilise et j'aime le module fboauth )
  • il existe d'autres modules de connexion sociale qui prennent en charge google, paypal, yahoo, openid, etc.
  • vous pouvez modifier l'option d'enregistrement pour ne pas exiger de confirmations par e-mail.

Pour répondre à votre dernière question:

Quelle direction ou recette suggéreriez-vous pour réaliser la fonctionnalité? Bien sûr, le but ultime ici est de permettre aux utilisateurs anon de publier; créer un compte dans les coulisses pour une utilisation future; permettre l'utilisation du formulaire anon même pour les utilisateurs avec des e-mails qui ont déjà des comptes (et attribuer du contenu en conséquence.) tout en maintenant la sécurité (contre le spam, les bots) qui est offerte en demandant à un utilisateur de s'inscrire et d'authentifier un compte.

Je suggère d'utiliser une fonction "enregistrement de noeud anonyme" (je peux partager du code si vous le souhaitez). J'ajoute les champs "nom" et "adresse e-mail" à un formulaire "ajout de nœud".

Si l'e-mail n'existe pas déjà, il créera un nouveau compte utilisateur. Il utilise le prénom pour créer le nom d'utilisateur et ajoute des numéros si nécessaire pour le rendre unique.

Le mot de passe est défini de manière aléatoire et affiché à l'utilisateur après avoir soumis le nœud avec un lien pour changer le mot de passe.

De plus, les confirmations par e-mail n'empêcheront pas les robots de spam de s'inscrire. Je recommande fortement le module spambot .

uwe
la source
2
Vous avez mentionné le code que vous pourriez partager. Vous avez déjà écrit un module pour votre propre usage? J'aimerais y jeter un œil si vous souhaitez le mettre en ligne quelque part. Merci!
blue928