Anonim kullanıcıların içerik bütünlüğünü korurken yayınlamalarına nasıl izin verilir?


8

Biraz arka plan: http://charlotte.ebayclassifieds.com adresinde gördüğünüz gibi , 'bir reklam yayınla'yı tıklayıp bir kategori seçerseniz, formu doldurup kaydolmak zorunda kalmadan içerik gönderebilirsiniz. Tüm bunlar, tıklandığında kullanıcının içeriğini değiştirmesine izin veren e-posta adresi alanına doğrulama e-postaları göndererek yapılır ve yönetilir.

Drupal'da benzer işlevler elde edilebilir. Bir modül yazmayı umursamıyorum, ama yapmadan önce, tekerleği yeniden keşfetmediğimden emin olmak istiyorum.

Http://www.gastonia.com adresinde topluluğum için Drupal merkezli yerel ilanlar sitem var . Site anonim trafikte büyüyor, ancak az sayıda kullanıcı yayın göndermek için kaydoluyor. Toplulukla birkaç geri bildirim döngüsünden sonra, hemen hemen herkes giriş önündeki tek engelin bir hesaba kaydolmak, e-postayı kontrol etmek, doğrulamak, bir reklam yayınlamak için nasıl gidileceğini bulmak, vb. bir reklamın gerçekten yayınlanmadan önce geçmesi gerekir. Bu çok fazla..

Mimariyi iki tıklamaya indirebilmek için elden geçirdik - göndermek için tıklayın, ardından kaydetmek için tıklayın. Daha spesifik olarak, bir kullanıcı 'İçerik ekle'yi tıklar ve düğüm / ekleme formu açılır (şimdi yeni mimaride yalnızca bir içerik türü vardır); Ardından, tamamlandığında kaydet'i tıklayın.

Başlangıçta Inline Kayıt modülünü düşündüm , ancak hala DEV'de ve mantık gerçekten kullanıcı aynı e-posta adresiyle tekrar oturum açmaya gelirse (oturum açmadan) desteklenmiyor. Değiştirebilirdim, ama sonra bir modül yazmaya geri döndük.

Ayrıca kuralları düşündüm - kurallar ebayclassifieds sitesi veya ne yapmaya çalışıyorum benzer işlevsellik işleyebilir? Tüm bunlar, düğüm / ekleme formunda (CRUD işlevselliği) gönderilen bir e-postaya dayanır.

İşlevi elde etmek için hangi yönü veya tarifi önerirsiniz? Tabii ki buradaki nihai hedef, anon kullanıcılarının yayın göndermesine izin vermektir; ileride kullanmak üzere perde arkasında bir hesap oluşturmak; zaten bir hesabı olan (ve buna göre içerik atayan) e-postaları olan kullanıcılar için bile anon formunun kullanılmasına izin verirken, bir kullanıcının bir hesap açıp kimliğini doğrulamasıyla sağlanan güvenliği (spam, bot'lardan) koruyun.

EDIT: 4/1/2013 Gisle Hannemyr, burada ve diğer yazılarda açıklanan hedeflere ulaşmak için çok yakın olan Anonim Yayıncılık modülünü yeniden canlandırdı . Modül hatasını nasıl ücretsiz ve daha iyi hale getireceğimize dair bazı topluluk geri bildirimleri sağlamak için lütfen konuya katılın : http://drupal.org/node/1957644


Bir süre önce benzer bir soru sordum: drupal.stackexchange.com/questions/25194/…
paul-m

OAuth / OpenID kullanıcılarınız için çok mu fazla olurdu? Janrain giriş yapmak için bir esinti yapar.
Capi Etheriel

Janrain'i hiç duymadım, ancak giriş yapmak için başka hesapları kullanan kişilerin fikrini seviyorum. DSE'de olduğu gibi google hesabımı her zaman kullanıyorum. Kadar basit?
blue928

Yanıtlar:


7

Bunun sadece kurallarla mümkün olduğunu düşünmüyorum.

Doğrulama e-posta adresini yakalamak için gönderim formunu değiştirmeniz ve ayrıca spam gönderenleri yasaklamak ve geri dönen ziyaretçileri tanımak için bir mantığa ihtiyacınız vardır.

Anonim Yayıncılık adlı bir projenin sürdürücüsüyüm . Bu modül istediğinizi yapıyor gibi görünüyor.

Hala geliştirilme aşamasında, ancak Drupal 7 sürümü üretim sitelerimin birçoğunda sorunsuz olarak kullanıldı. Lütfen kontrol et.

Bu sorunun altındaki cevaplara da bakmak isteyebilirsiniz .


Bunun için teşekkürler, kodu kontrol etmek için biraz zaman harcayacak!
blue928

Bu modül hakkında aktif bir tartışma yapamayacağımızı görmek için drupal.org/node/1957644 adresinde bir ileti dizisi oluşturdum . Bunu dirilttiğiniz için teşekkürler.
blue928

2

Yeni bir menü geri arama oluşturarak buna benzer bir şey elde ettim example.com/anon_user- giriş ve kayıt formu olarak iki katına çıkan bir form sağlayan - gibi bir şey . Bu, kullanıcının kayıt işlemini çok hızlı bir şekilde geçmesine VEYA çok fazla eylem gerçekleştirmesine izin vermeden oturum açmasına olanak tanır. Aslında oldukça iyi karşılandı.

İşte bunu göstermek için bazı basitleştirilmiş kod:

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

Gereksinim duyduğunuz kadar doğrulayın:

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

Gönderme işleyicisinde, bu e-postanın zaten var olup olmadığını bulmalı ve giriş yapmaya çalışmalıyız. Varsa, onlar için bir hesap oluşturmayı deneyin.

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

Bu oldukça basit bir örnek. Parola gereksinimleri, 2. alan, parola onayı, kullanıcı adı alanı, daha iyi uyarılar, vb. Ekleyebilirsiniz. Daha fazla kısıtlama işlemi ne kadar uzun olursa, bu da akılda tutulması gereken bir şeydir.


2

"Kayıt engelini" düşürmenin birçok yolu vardır:

  • facebook hesabı ile girişe izin vermek için Facebook connect kullanın ( fboauth modülünü kullanıyorum ve beğendim )
  • google, paypal, yahoo, openid, vb. destekleyen diğer sosyal giriş modülleri vardır.
  • kayıt seçeneğini e-posta onayları gerektirmeyecek şekilde değiştirebilirsiniz.

Son sorunuza cevap vermek için:

İşlevi elde etmek için hangi yönü veya tarifi önerirsiniz? Tabii ki buradaki nihai hedef, anon kullanıcılarının yayın göndermesine izin vermektir; ileride kullanmak üzere perde arkasında bir hesap oluşturmak; zaten bir hesabı olan (ve buna göre içerik atayan) e-postaları olan kullanıcılar için bile anon formunun kullanılmasına izin verirken, bir kullanıcının bir hesap açıp kimliğini doğrulamasıyla sağlanan güvenliği (spam, bot'lardan) koruyun.

Bir "anonim düğüm kaydı" özelliği kullanmanızı öneririm (isterseniz kodu paylaşabilirsiniz). Bir "düğüm ekleme" formuna "ad" ve "e-posta adresi" alanları eklerim.

E-posta zaten yoksa yeni bir kullanıcı hesabı oluşturur. Kullanıcı adını oluşturmak için adı kullanır ve benzersiz hale getirmek için gerekirse numaralar ekler.

Parola rastgele ayarlanır ve parolayı değiştirmek için bir bağlantıyla düğümü gönderdikten sonra kullanıcıya gösterilir.

Ayrıca, e-posta onayları spam botlarının kaydolmasını engellemez. Spambot modülünü şiddetle tavsiye ederim .


2
Paylaşabileceğiniz koddan bahsettiniz. O zaman zaten kendi kullanımınız için bir modül yazdınız mı? Çevrimiçi bir yere koymak isterseniz, bir göz atmak istiyorum. Teşekkürler!
blue928

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.