Bagaimana pengguna anonim diizinkan untuk mengirim sambil tetap mempertahankan integritas konten?

8

Sedikit latar belakang: Seperti yang Anda lihat di http://charlotte.ebayclassifieds.com , jika Anda mengklik 'posting iklan' dan kemudian pilih kategori, Anda dapat mengisi formulir dan mengirimkan konten tanpa harus mendaftar. Ini semua dilakukan dan dikelola dengan mengirim email validasi ke bidang alamat email yang, ketika diklik, memungkinkan pengguna untuk memanipulasi konten mereka.

Dapatkah fungsi serupa dicapai di Drupal. Saya tidak keberatan menulis modul, tetapi sebelum saya melakukannya, saya ingin memastikan saya tidak menciptakan kembali roda.

Saya memiliki situs iklan baris lokal berbasis Drupal untuk komunitas saya di http://www.gastonia.com . Situs ini tumbuh dalam lalu lintas anonim, tetapi beberapa pengguna mendaftar untuk memposting. Setelah umpan balik beberapa putaran dengan komunitas, hampir semua orang mengatakan bahwa satu halangan untuk masuk adalah harus mendaftar untuk akun, memeriksa email, memvalidasi, mencari cara menavigasi untuk mengirim iklan, dll - memang ada 7 langkah harus melalui sebelum iklan benar-benar dipublikasikan. Ini terlalu banyak..

Kami telah mengerjakan ulang arsitektur untuk dapat menurunkannya menjadi dua klik - klik untuk mengirim, lalu klik untuk menyimpan. Lebih khusus lagi, pengguna mengklik 'Tambahkan konten' dan node / tambahkan formulir muncul (sekarang hanya ada satu jenis konten dalam arsitektur baru); Kemudian, ketika mereka selesai, mereka mengklik simpan.

Awalnya saya berpikir tentang modul Pendaftaran Inline , tetapi masih dalam DEV dan logika benar-benar tidak ada untuk mendukung jika pengguna kembali memposting lagi dengan alamat email yang sama (tanpa masuk ke dalam). Saya bisa mengubahnya, tetapi kemudian kita kembali menulis modul.

Saya juga memikirkan Aturan - bisakah aturan menangani fungsi yang serupa dengan situs ebayclassifieds atau apa yang saya coba lakukan? Itu semua akan didasarkan pada email yang diajukan di node / add form (fungsi CRUD).

Apa arah atau resep yang akan Anda sarankan untuk mencapai fungsionalitas? Tentu saja tujuan akhir di sini adalah untuk memungkinkan pengguna untuk memposting; buat akun di belakang layar untuk penggunaan di masa depan; memungkinkan penggunaan formulir anon bahkan untuk pengguna dengan email yang sudah memiliki akun (dan menetapkan konten yang sesuai). Semua sambil menjaga keamanan (dari spam, bot) yang diberikan dengan meminta pengguna mendaftar dan mengotentikasi akun.

EDIT: 4/1/2013 Gisle Hannemyr telah menghidupkan kembali modul Penerbitan Anonim yang sangat dekat dengan mencapai tujuan yang dijelaskan di sini dan di pos lainnya. Silakan ambil bagian di utas untuk memberikan umpan balik kepada komunitas tentang cara membuat bug modul lebih bebas dan lebih baik: http://drupal.org/node/1957644

blue928
sumber
Saya mengajukan pertanyaan serupa beberapa waktu lalu: drupal.stackexchange.com/questions/25194/…
paul-m
Apakah OAuth / OpenID terlalu banyak untuk pengguna Anda? Janrain membuatnya mudah untuk masuk.
Capi Etheriel
Saya belum pernah mendengar tentang Janrain, tetapi saya menyukai gagasan orang yang menggunakan akun lain untuk masuk. Seperti di sini di DSE saya selalu menggunakan akun google saya. Sesimpel itu?
blue928

Jawaban:

7

Saya tidak berpikir ini mungkin dengan aturan saja.

Anda perlu mengubah formulir pengiriman untuk mendapatkan alamat email verifikasi, dan Anda juga perlu logika untuk melarang spammer dan mengenali pengunjung yang kembali.

Saya adalah pengelola proyek bernama Anonymous Publishing . Sepertinya modul ini melakukan apa yang Anda inginkan.

Ini masih dalam pengembangan, tetapi versi Drupal 7 telah digunakan di beberapa lokasi produksi saya tanpa masalah. Silakan periksa.

Anda mungkin juga ingin melihat jawaban di bawah pertanyaan ini .

Radikal bebas
sumber
Terima kasih untuk itu, akan menghabiskan waktu memeriksa kode!
blue928
Saya membuat utas di drupal.org/node/1957644 untuk melihat apakah kita tidak bisa mendapatkan diskusi aktif tentang modul itu. Terima kasih telah menghidupkannya kembali.
blue928
2

Saya mencapai sesuatu yang mirip dengan ini pada proyek baru-baru ini dengan membuat menu panggilan balik baru - sesuatu seperti example.com/anon_user- yang menyediakan formulir yang berfungsi ganda sebagai login dan formulir pendaftaran. Ini memungkinkan pengguna untuk dengan sangat cepat melalui proses pendaftaran ATAU untuk masuk tanpa membuat mereka melakukan terlalu banyak tindakan. Ini sebenarnya sudah diterima dengan cukup baik.

Berikut ini beberapa kode sederhana untuk menunjukkan ini:

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

Validasikan sesuai kebutuhan Anda:

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

Di penangan kirim, kita perlu mencari tahu apakah email ini sudah ada dan mencoba untuk masuk. Jika tidak ada, cobalah untuk membuat akun untuk mereka.

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

Ini adalah contoh yang cukup sederhana. Anda dapat menambahkan persyaratan kata sandi, konfirmasi kata sandi melalui bidang ke-2, bidang nama pengguna, peringatan yang lebih baik, dll. Semakin banyak pembatasan semakin lama prosesnya, jadi itu sesuatu yang perlu diingat.

Charlie Schliesser
sumber
2

Ada banyak cara untuk menurunkan "rintangan registrasi":

  • gunakan Facebook connect untuk mengizinkan masuk dengan akun Facebook (saya menggunakan dan menyukai modul fboauth )
  • ada modul login sosial lain yang mendukung google, paypal, yahoo, openid, dll.
  • Anda dapat mengubah opsi pendaftaran untuk tidak memerlukan konfirmasi email.

Untuk menjawab pertanyaan terakhir Anda:

Apa arah atau resep yang akan Anda sarankan untuk mencapai fungsionalitas? Tentu saja tujuan akhir di sini adalah untuk memungkinkan pengguna untuk memposting; buat akun di belakang layar untuk penggunaan di masa depan; memungkinkan penggunaan formulir anon bahkan untuk pengguna dengan email yang sudah memiliki akun (dan menetapkan konten yang sesuai). Semua sambil menjaga keamanan (dari spam, bot) yang diberikan dengan meminta pengguna mendaftar dan mengotentikasi akun.

Saya sarankan untuk menggunakan fitur "pendaftaran simpul anonim" (saya bisa membagikan kode jika Anda mau). Saya menambahkan bidang "nama" dan "alamat email" ke formulir "simpul tambahkan".

Jika email belum ada, itu akan membuat akun pengguna baru. Ia menggunakan nama depan untuk membuat nama pengguna dan menambahkan angka jika perlu untuk membuatnya unik.

Kata sandi diatur secara acak dan ditampilkan kepada pengguna setelah mengirimkan simpul dengan tautan untuk mengubah kata sandi.

Juga, konfirmasi email tidak akan mencegah mendaftarnya bot spam. Saya sangat merekomendasikan modul spambot .

kamu
sumber
2
Anda menyebutkan kode yang bisa Anda bagikan. Lalu Anda sudah menulis modul untuk Anda gunakan sendiri? Saya ingin melihatnya jika Anda ingin meletakkannya di suatu tempat. Terima kasih!
blue928
2

Ada juga modul ini sekarang juga: Buat dan Daftar

cdmo
sumber