Як анонімним користувачам можна дозволити публікувати публікації, зберігаючи цілісність вмісту?


8

Невелика довідка. Як ви бачите на http://charlotte.ebayclassifieds.com , якщо натиснути "Опублікувати оголошення", а потім вибрати категорію, ви можете заповнити форму та надіслати вміст без реєстрації. Це все робиться та управляється шляхом надсилання електронних листів для підтвердження в поле електронної адреси, яке при натисканні дозволяє користувачеві маніпулювати їх вмістом.

Чи можна подібну функціональність досягти в Drupal. Я не проти написати модуль, але перш ніж це зробити, я хочу переконатися, що я не винаходив колесо.

Для моєї спільноти на веб- сайті http://www.gastonia.com є веб- сайт місцевих оголошень на основі Drupal . Сайт зростає в анонімному трафіку, але мало користувачів підписується на публікацію. Після пари циклів зворотного зв’язку із спільнотою майже всі кажуть, що одним із бар'єрів для входу є реєстрація в обліковому записі, перевірка електронної пошти, перевірка підтвердження, з'ясування способів навігації для розміщення оголошення тощо. Дійсно, є 7 кроків необхідно пройти ще до того, як оголошення буде фактично опубліковане. Це занадто..

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

Спочатку я думав про модуль вбудованої реєстрації , але він все ще знаходиться в DEV, і логіка насправді не існує для підтримки, якщо користувач знову повернеться до публікації з тією ж адресою електронної пошти (без входу в систему). Я міг би це змінити, але тоді ми повернулися до написання модуля.

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

Який напрямок чи рецепт ви б запропонували для досягнення функціональності? Звичайно, кінцева мета тут - дозволити іншим користувачам публікувати повідомлення; створити обліковий запис за лаштунками для подальшого використання; дозволяють використовувати форму анон навіть для користувачів з електронними повідомленнями, які вже мають облікові записи (і призначають відповідний вміст відповідно), зберігаючи безпеку (від спаму, ботів), яка надається завдяки реєстрації та автентифікації облікового запису користувача.

EDIT: 01.04.2013 Gisle Hannemyr відновив модуль "Анонімне видавництво", який дуже близький до досягнення цілей, описаних тут та в інших публікаціях. Будь ласка, приймайте участь у потоці, щоб надати кілька відгуків спільноти про те, як зробити модульну помилку вільною та кращою: http://drupal.org/node/1957644


Я задав подібне запитання назад: drupal.stackexchange.com/questions/25194/…
paul-m

Чи буде OAuth / OpenID занадто багато для ваших користувачів? Джаррен робить вітер для входу в систему.
Capi Etheriel

Я ніколи не чув про Janrain, але мені подобається ідея людей, які використовують інші акаунти для входу. Як і тут, на DSE, я завжди використовую свій обліковий запис google. Так просто?
blue928

Відповіді:


7

Я не думаю, що це можливо лише за допомогою правил.

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

Я організатор проекту під назвою Anonymous Publishing . Схоже, цей модуль робить те, що ви хочете.

Він ще в розробці, але версія Drupal 7 використовувалася на кількох моїх виробничих майданчиках без жодних проблем. Будь ласка, перевірте це.

Ви також можете переглянути відповіді під цим питанням .


Дякуємо за це, витратять деякий час на перевірку коду!
blue928

Я створив нитку на drupal.org/node/1957644, щоб побачити, чи не можемо ми активно обговорити цей модуль. Дякуємо, що відродили це.
blue928

2

Щось подібного до цього я досяг у нещодавньому проекті, створивши новий зворотний дзвінок у меню - щось на зразок 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

Існує багато способів зменшити "перешкоду реєстрації":

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

Щоб відповісти на ваше останнє запитання:

Який напрямок чи рецепт ви б запропонували для досягнення функціональності? Звичайно, кінцева мета тут - дозволити іншим користувачам публікувати повідомлення; створити обліковий запис за лаштунками для подальшого використання; дозволяють використовувати форму анон навіть для користувачів з електронними повідомленнями, які вже мають облікові записи (і призначають відповідний вміст відповідно), зберігаючи безпеку (від спаму, ботів), яка надається завдяки реєстрації та автентифікації облікового запису користувача.

Я пропоную скористатися функцією "реєстрація анонімного вузла" (я можу поділитися кодом, якщо вам подобається). Я додаю поля "ім'я" та "адреса електронної пошти" до форми "додавання вузла".

Якщо електронний лист вже не існує, він створить новий обліковий запис користувача. Він використовує ім'я для створення імені користувача та додає номери, якщо необхідно, щоб зробити його унікальним.

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

Також підтвердження електронною поштою не перешкоджають реєстрації спам-ботів. Я настійно рекомендую модуль спаму .


2
Ви згадали код, яким можете поділитися. Тоді ви вже написали модуль для власного користування? Я хотів би поглянути на це, якщо ви хочете десь розмістити його в Інтернеті. Дякую!
blue928

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.