W jaki sposób anonimowi użytkownicy mogą publikować posty, zachowując jednocześnie integralność treści?

8

Trochę tła: jak widać na stronie http://charlotte.ebayclassifieds.com , jeśli klikniesz „opublikuj reklamę”, a następnie wybierzesz kategorię, możesz wypełnić formularz i przesłać treść bez konieczności rejestracji. Wszystko to odbywa się i jest zarządzane przez wysyłanie wiadomości e-mail z potwierdzeniem na pole adresu e-mail, które po kliknięciu umożliwiają użytkownikowi manipulowanie zawartością.

Czy podobną funkcjonalność można osiągnąć w Drupal. Nie mam nic przeciwko napisaniu modułu, ale zanim to zrobię, chcę się upewnić, że nie wymyślę koła na nowo.

Mam lokalną witrynę ogłoszeniową opartą na Drupal dla mojej społeczności pod adresem http://www.gastonia.com . Witryna rośnie w ruchu anonimowym, ale niewielu użytkowników rejestruje się, aby publikować. Po kilku opiniach ze społecznością prawie wszyscy mówią, że jedyną barierą wejścia jest konieczność założenia konta, sprawdzania poczty elektronicznej, sprawdzania poprawności, wymyślania sposobu nawigacji w celu opublikowania reklamy itp. - w rzeczywistości jest 7 kroków konieczne, aby przejść przed opublikowaniem reklamy. To za dużo..

Zmieniliśmy architekturę, aby była w stanie zredukować ją do dwóch kliknięć - kliknij, aby opublikować, a następnie kliknij, aby zapisać. Mówiąc dokładniej, użytkownik klika „Dodaj treść”, a wyskakuje formularz węzła / dodawania (w nowej architekturze jest teraz tylko jeden typ zawartości); Następnie po zakończeniu klikają przycisk Zapisz.

Początkowo myślałem o module rejestracji Inline , ale nadal jest on w DEV i logika naprawdę nie jest do obsługi, jeśli użytkownik wróci, aby ponownie wysłać wiadomość z tym samym adresem e-mail (bez logowania). Mógłbym to zmienić, ale wróciliśmy do pisania modułu.

Zastanawiałem się także nad Regułami - czy reguły mogą obsługiwać podobną funkcjonalność jak strona ebayclassifieds lub co próbuję zrobić? Wszystko opierałoby się na wiadomości e-mail złożonej w formie węzła / dodania (funkcjonalność CRUD).

Jaki kierunek lub przepis sugerujesz, aby osiągnąć tę funkcjonalność? Oczywiście ostatecznym celem jest umożliwienie użytkownikom anonu zamieszczania postów; utwórz konto za kulisami do przyszłego użytku; zezwalaj na korzystanie z formularza anon nawet dla użytkowników posiadających e-maile, które mają już konta (i odpowiednio przypisuj treść). Wszystko to przy zachowaniu bezpieczeństwa (przed spamem, botami), które można uzyskać dzięki rejestracji użytkownika i uwierzytelnieniu konta.

EDYCJA: 4/1/2013 Gisle Hannemyr ożywił moduł Anonimowego Publikowania, który jest bardzo bliski osiągnięcia celów opisanych tutaj i na innych postach. Weź udział w wątku, aby przekazać opinie społeczności, w jaki sposób uczynić moduł wolnym od błędów i lepszym: http://drupal.org/node/1957644

blue928
źródło
Zadałem podobne pytanie jakiś czas temu: drupal.stackexchange.com/questions/25194/...
paul-m
Czy OAuth / OpenID byłoby zbyt duże dla Twoich użytkowników? Janrain ułatwia logowanie.
Capi Etheriel,
Nigdy nie słyszałem o Janrain, ale podoba mi się pomysł, że ludzie używają innych kont do logowania. Podobnie jak tutaj w DSE zawsze używam mojego konta Google. Tak proste jak to?
blue928,

Odpowiedzi:

7

Nie sądzę, że jest to możliwe przy samych zasadach.

Musisz zmienić formularz zgłoszenia, aby przechwycić weryfikacyjny adres e-mail, a także potrzebujesz logiki, aby zablokować spamerów i rozpoznać powracających gości.

Jestem opiekunem projektu o nazwie Anonymous Publishing . Wygląda na to, że ten moduł robi to, co chcesz.

Nadal jest w fazie rozwoju, ale wersja Drupal 7 została użyta w kilku moich zakładach produkcyjnych bez żadnych problemów. Proszę sprawdź to.

Możesz także przyjrzeć się odpowiedziom na to pytanie .

Darmowe radykalne
źródło
Dzięki za to poświęcę trochę czasu na sprawdzenie kodu!
blue928,
Utworzyłem wątek na drupal.org/node/1957644, aby sprawdzić, czy nie możemy rozpocząć aktywnej dyskusji na temat tego modułu. Dzięki za to, że ożywiłem.
blue928
2

Osiągnąłem coś podobnego do tego w ostatnim projekcie, tworząc nowe wywołanie zwrotne menu - coś podobnego example.com/anon_user- co zapewnia formularz, który służy również jako login i formularz rejestracyjny. Pozwala to użytkownikowi bardzo szybko przejść proces rejestracji LUB zalogować się bez konieczności wykonywania zbyt wielu czynności. Został przyjęty dość dobrze.

Oto uproszczony kod, który to pokazuje:

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

Zweryfikuj to jednak, czego potrzebujesz:

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

W module obsługi przesyłania musimy dowiedzieć się, czy ten e-mail już istnieje i spróbować się zalogować. Jeśli nie istnieje, spróbuj utworzyć dla nich konto.

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

To dość prosty przykład. Możesz dodać wymagania dotyczące hasła, potwierdzenie hasła za pomocą drugiego pola, pola nazwy użytkownika, lepsze ostrzeżenia itp. Im więcej ograniczeń, tym dłuższy proces, więc należy o tym pamiętać.

Charlie Schliesser
źródło
2

Istnieje wiele sposobów obniżenia „przeszkody rejestracyjnej”:

  • Użyj Facebook Connect, aby umożliwić logowanie za pomocą konta na Facebooku (używam i lubię moduł FBOAUTH )
  • istnieją inne moduły logowania społecznościowego obsługujące google, paypal, yahoo, openid itp.
  • możesz zmienić opcję rejestracji, aby nie wymagać potwierdzeń e-mailem.

Aby odpowiedzieć na twoje ostatnie pytanie:

Jaki kierunek lub przepis sugerujesz, aby osiągnąć tę funkcjonalność? Oczywiście ostatecznym celem jest umożliwienie użytkownikom anonu zamieszczania postów; utwórz konto za kulisami do przyszłego użytku; zezwalaj na korzystanie z formularza anon nawet dla użytkowników posiadających e-maile, które mają już konta (i odpowiednio przypisuj treść). Wszystko to przy zachowaniu bezpieczeństwa (przed spamem, botami), które można uzyskać dzięki rejestracji użytkownika i uwierzytelnieniu konta.

Proponuję użyć funkcji „anonimowej rejestracji węzła” (mogę udostępnić kod, jeśli chcesz). Dodaję pola „nazwa” i „adres e-mail” do formularza „dodaj węzeł”.

Jeśli wiadomość e-mail jeszcze nie istnieje, utworzy nowe konto użytkownika. Używa imienia, aby utworzyć nazwę użytkownika i w razie potrzeby dodaje liczby, aby uczynić ją niepowtarzalną.

Hasło jest ustawiane losowo i wyświetlane użytkownikowi po przesłaniu węzła z linkiem do zmiany hasła.

Potwierdzenia e-mail nie zapobiegną również rejestracji botów spamowych. Bardzo polecam moduł spambot .

uwe
źródło
2
Wspomniałeś o kodzie, który możesz udostępnić. Więc napisałeś już moduł na własny użytek? Chciałbym rzucić na to okiem, jeśli chcesz gdzieś umieścić go online. Dzięki!
blue928,