Как можно разрешить анонимным пользователям публиковать сообщения, сохраняя при этом целостность контента?


Небольшая предыстория: Как вы видите на http://charlotte.ebayclassifieds.com , если вы нажмете "опубликовать объявление", а затем выберете категорию, вы можете заполнить форму и отправить контент без необходимости регистрации. Все это делается и управляется путем отправки подтверждающих электронных писем в поле адреса электронной почты, которые при нажатии позволяют пользователю манипулировать своим контентом.

Может ли аналогичная функциональность быть достигнута в Drupal. Я не против написать модуль, но прежде чем я это сделаю, я хочу убедиться, что я не изобретаю велосипед заново.

У меня есть сайт местных объявлений на основе Drupal для моего сообщества по адресу http://www.gastonia.com . На сайте растет анонимный трафик, но мало кто из пользователей подписывается на публикацию. После нескольких циклов обратной связи с сообществом почти все говорят, что единственным препятствием для входа является необходимость зарегистрироваться в учетной записи, проверить электронную почту, подтвердить, выяснить, как перейти к публикации объявления и т. Д. - Действительно, необходимо выполнить 7 шагов до того, как объявление действительно будет опубликовано. Это слишком много..

Мы переработали архитектуру, чтобы сократить ее до двух кликов - нажмите, чтобы опубликовать, затем нажмите, чтобы сохранить. Более конкретно, пользователь нажимает "Добавить контент", и появляется форма "Узел/добавить" (в новой архитектуре теперь есть только один тип контента); Затем, когда они закончат, они нажимают "Сохранить".

Первоначально я думал о модуле встроенной регистрации , но он все еще находится в разработке, и логика действительно такова нет поддержки, если пользователь вернется, чтобы снова опубликовать сообщение с тем же адресом электронной почты (без входа в систему). Я мог бы изменить его, но тогда мы вернемся к написанию модуля.

Я также подумал о правилах - могут ли правила работать с аналогичной функциональностью, как на сайте ebayclassifieds, или что я пытаюсь сделать? Все это будет основано на электронном письме, поданном в форме узла/добавления (функциональность CRUD).

Какое направление или рецепт вы бы предложили для достижения функциональности? Конечно, конечная цель здесь необходимо разрешить пользователям anon публиковать сообщения; создать учетную запись за кулисами для использования в будущем; разрешить использование формы anon даже для пользователей с электронными письмами, у которых уже есть учетные записи (и соответственно назначать контент). все это при сохранении безопасности (от спама, ботов), которая обеспечивается за счет регистрации пользователя и аутентификации учетной записи.

ИЗМЕНИТЬ: 4/1/2013 Жизель Ханнемир возродила модуль Анонимной публикации, который очень близок к достижению целей, описанных здесь и в других сообщений. Пожалуйста, примите участие в теме, чтобы предоставить некоторую обратную связь сообщества о том, как сделать модуль без ошибок и лучше: http://drupal.org/node/1957644

Author: tanius, 2012-12-18

4 answers

Я не думаю, что это возможно только с помощью правил.

Вам необходимо изменить форму отправки, чтобы сохранить адрес электронной почты для подтверждения, а также вам нужна некоторая логика, чтобы запретить спамеров и распознавать возвращающихся посетителей.

Я являюсь сопровождающим проекта под названием Анонимная публикация . Похоже, что этот модуль делает то, что вы хотите.

Он все еще находится в разработке, но версия Drupal 7 использовалась на нескольких моих производственных площадках без каких-либо проблем. Пожалуйста, проверьте это.

Возможно, вы также захотите взглянуть на ответы в разделе на этот вопрос.

 7
Author: Free Radical, 2017-04-13 12:47:06

Я добился чего–то подобного в недавнем проекте, создав новый обратный вызов меню – что-то вроде example.com/anon_user - который предоставляет форму, которая одновременно служит для входа и регистрации. Это позволяет пользователю очень быстро пройти процесс регистрации ИЛИ войти в систему, не заставляя его выполнять слишком много действий. На самом деле это было воспринято довольно хорошо.

Вот несколько упрощенных кодов, демонстрирующих это:

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

Подтвердите это, как вам нужно:

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

В обработчик отправки, нам нужно выяснить, существует ли уже это электронное письмо, и попытаться войти в систему. Если он не существует, попробуйте создать для него учетную запись.

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

Это довольно простой пример. Вы можете добавить требования к паролю, подтверждение пароля через 2-е поле, поле имени пользователя, лучшие предупреждения и т.д. Чем больше ограничений, тем дольше процесс, так что об этом стоит помнить.

 2
Author: Charlie Schliesser, 2012-12-21 08:01:28

Существует множество способов снизить "барьер регистрации":

  • используйте Facebook connect, чтобы разрешить вход в систему с учетной записью facebook (я использую и люблю модуль fboauth)
  • существуют и другие модули входа в социальные сети, которые поддерживают google, paypal, yahoo, openid и т.д.
  • вы можете изменить опцию регистрации, чтобы не требовать подтверждения по электронной почте.

Чтобы ответить на ваш последний вопрос:

Какое направление или рецепт вы бы предложили для достижения функциональности? Конечно, конечная цель здесь - разрешить пользователям anon публиковать сообщения; создать учетную запись за кулисами для использования в будущем; разрешить использование формы anon даже для пользователей с электронными письмами, у которых уже есть учетные записи (и соответственно назначать контент). все это при сохранении безопасности (от спама, ботов), которая обеспечивается за счет регистрации пользователя и аутентификации учетной записи.

Я предлагаю использовать функцию "анонимной регистрации узлов" (я могу поделиться кодом, если хотите). Я добавляет поля "имя" и "адрес электронной почты" в форму "добавление узла".

Если адрес электронной почты еще не существует, он создаст новую учетную запись пользователя. Он использует имя пользователя для создания имени пользователя и добавляет номера, если это необходимо, чтобы сделать его уникальным.

Пароль устанавливается случайным образом и отображается пользователю после отправки узла со ссылкой для изменения пароля.

Кроме того, подтверждения по электронной почте не помешают спам-ботам зарегистрироваться. Я настоятельно рекомендую модуль spambot.

 2
Author: uwe, 2012-12-23 19:09:26

Теперь также есть этот модуль: Создание и регистрация

 2
Author: cdmo, 2013-01-15 15:32:12