Как можно разрешить анонимным пользователям публиковать сообщения, сохраняя при этом целостность контента?
Небольшая предыстория: Как вы видите на http://charlotte.ebayclassifieds.com , если вы нажмете "опубликовать объявление", а затем выберете категорию, вы можете заполнить форму и отправить контент без необходимости регистрации. Все это делается и управляется путем отправки подтверждающих электронных писем в поле адреса электронной почты, которые при нажатии позволяют пользователю манипулировать своим контентом.
Может ли аналогичная функциональность быть достигнута в Drupal. Я не против написать модуль, но прежде чем я это сделаю, я хочу убедиться, что я не изобретаю велосипед заново.
У меня есть сайт местных объявлений на основе Drupal для моего сообщества по адресу http://www.gastonia.com . На сайте растет анонимный трафик, но мало кто из пользователей подписывается на публикацию. После нескольких циклов обратной связи с сообществом почти все говорят, что единственным препятствием для входа является необходимость зарегистрироваться в учетной записи, проверить электронную почту, подтвердить, выяснить, как перейти к публикации объявления и т. Д. - Действительно, необходимо выполнить 7 шагов до того, как объявление действительно будет опубликовано. Это слишком много..
Мы переработали архитектуру, чтобы сократить ее до двух кликов - нажмите, чтобы опубликовать, затем нажмите, чтобы сохранить. Более конкретно, пользователь нажимает "Добавить контент", и появляется форма "Узел/добавить" (в новой архитектуре теперь есть только один тип контента); Затем, когда они закончат, они нажимают "Сохранить".
Первоначально я думал о модуле встроенной регистрации , но он все еще находится в разработке, и логика действительно такова нет поддержки, если пользователь вернется, чтобы снова опубликовать сообщение с тем же адресом электронной почты (без входа в систему). Я мог бы изменить его, но тогда мы вернемся к написанию модуля.
Я также подумал о правилах - могут ли правила работать с аналогичной функциональностью, как на сайте ebayclassifieds, или что я пытаюсь сделать? Все это будет основано на электронном письме, поданном в форме узла/добавления (функциональность CRUD).
Какое направление или рецепт вы бы предложили для достижения функциональности? Конечно, конечная цель здесь необходимо разрешить пользователям anon публиковать сообщения; создать учетную запись за кулисами для использования в будущем; разрешить использование формы anon даже для пользователей с электронными письмами, у которых уже есть учетные записи (и соответственно назначать контент). все это при сохранении безопасности (от спама, ботов), которая обеспечивается за счет регистрации пользователя и аутентификации учетной записи.
ИЗМЕНИТЬ: 4/1/2013 Жизель Ханнемир возродила модуль Анонимной публикации, который очень близок к достижению целей, описанных здесь и в других сообщений. Пожалуйста, примите участие в теме, чтобы предоставить некоторую обратную связь сообщества о том, как сделать модуль без ошибок и лучше: http://drupal.org/node/1957644
4 answers
Я не думаю, что это возможно только с помощью правил.
Вам необходимо изменить форму отправки, чтобы сохранить адрес электронной почты для подтверждения, а также вам нужна некоторая логика, чтобы запретить спамеров и распознавать возвращающихся посетителей.
Я являюсь сопровождающим проекта под названием Анонимная публикация . Похоже, что этот модуль делает то, что вы хотите.
Он все еще находится в разработке, но версия Drupal 7 использовалась на нескольких моих производственных площадках без каких-либо проблем. Пожалуйста, проверьте это.
Возможно, вы также захотите взглянуть на ответы в разделе на этот вопрос.
Я добился чего–то подобного в недавнем проекте, создав новый обратный вызов меню – что-то вроде 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-е поле, поле имени пользователя, лучшие предупреждения и т.д. Чем больше ограничений, тем дольше процесс, так что об этом стоит помнить.
Существует множество способов снизить "барьер регистрации":
- используйте Facebook connect, чтобы разрешить вход в систему с учетной записью facebook (я использую и люблю модуль fboauth)
- существуют и другие модули входа в социальные сети, которые поддерживают google, paypal, yahoo, openid и т.д.
- вы можете изменить опцию регистрации, чтобы не требовать подтверждения по электронной почте.
Чтобы ответить на ваш последний вопрос:
Какое направление или рецепт вы бы предложили для достижения функциональности? Конечно, конечная цель здесь - разрешить пользователям anon публиковать сообщения; создать учетную запись за кулисами для использования в будущем; разрешить использование формы anon даже для пользователей с электронными письмами, у которых уже есть учетные записи (и соответственно назначать контент). все это при сохранении безопасности (от спама, ботов), которая обеспечивается за счет регистрации пользователя и аутентификации учетной записи.
Я предлагаю использовать функцию "анонимной регистрации узлов" (я могу поделиться кодом, если хотите). Я добавляет поля "имя" и "адрес электронной почты" в форму "добавление узла".
Если адрес электронной почты еще не существует, он создаст новую учетную запись пользователя. Он использует имя пользователя для создания имени пользователя и добавляет номера, если это необходимо, чтобы сделать его уникальным.
Пароль устанавливается случайным образом и отображается пользователю после отправки узла со ссылкой для изменения пароля.
Кроме того, подтверждения по электронной почте не помешают спам-ботам зарегистрироваться. Я настоятельно рекомендую модуль spambot.
Теперь также есть этот модуль: Создание и регистрация