ผู้ใช้นิรนามสามารถโพสต์ได้อย่างไรในขณะที่ยังคงความสมบูรณ์ของเนื้อหา


8

พื้นหลังเล็กน้อย: ดังที่คุณเห็นในhttp://charlotte.ebayclassifieds.comหากคุณคลิก 'โพสต์โฆษณา' จากนั้นเลือกหมวดหมู่คุณสามารถกรอกแบบฟอร์มและส่งเนื้อหาโดยไม่ต้องลงทะเบียน สิ่งนี้เสร็จสิ้นและจัดการโดยการส่งอีเมลการตรวจสอบไปยังเขตข้อมูลที่อยู่อีเมลซึ่งเมื่อคลิกจะอนุญาตให้ผู้ใช้จัดการเนื้อหาของพวกเขา

สามารถใช้ฟังก์ชันที่คล้ายกันได้ใน Drupal ฉันไม่สนใจที่จะเขียนโมดูล แต่ก่อนที่ฉันจะทำฉันต้องแน่ใจว่าฉันไม่ได้คิดค้นล้อใหม่

ฉันมี Drupal ตามเว็บไซต์ต่างท้องถิ่นสำหรับชุมชนของฉันที่http://www.gastonia.com ไซต์กำลังเติบโตในปริมาณการใช้ที่ไม่ระบุชื่อ แต่มีผู้ใช้ไม่กี่คนที่ลงทะเบียนเพื่อโพสต์ หลังจากข้อเสนอแนะสองสามครั้งลูปกับชุมชนเกือบทุกคนบอกว่าอุปสรรคหนึ่งที่รายการจะต้องลงทะเบียนสำหรับบัญชีตรวจสอบอีเมลตรวจสอบตรวจสอบคิดวิธีนำทางไปโพสต์โฆษณา ฯลฯ - แน่นอนมี 7 ขั้นตอน จำเป็นต้องผ่านก่อนที่โฆษณาจะได้รับการเผยแพร่จริง มันมากเกินไป ..

เราได้ปรับโครงสร้างสถาปัตยกรรมใหม่เพื่อให้สามารถกดได้สองคลิก - คลิกเพื่อโพสต์จากนั้นคลิกเพื่อบันทึก โดยเฉพาะอย่างยิ่งผู้ใช้คลิกที่ 'เพิ่มเนื้อหา' และโหนด / เพิ่มแบบฟอร์มปรากฏขึ้น (ขณะนี้มีประเภทเนื้อหาเดียวในสถาปัตยกรรมใหม่); จากนั้นเมื่อเสร็จแล้วให้คลิกบันทึก

เดิมฉันคิดเกี่ยวกับโมดูลการลงทะเบียนแบบอินไลน์แต่มันยังอยู่ใน DEV และตรรกะไม่ได้มีการสนับสนุนหากผู้ใช้กลับมาโพสต์อีกครั้งด้วยที่อยู่อีเมลเดียวกัน (โดยไม่ต้องเข้าสู่ระบบ) ฉันสามารถแก้ไขได้ แต่จากนั้นเรากลับไปเขียนโมดูล

ฉันยังคิดเกี่ยวกับกฎ - กฎสามารถจัดการฟังก์ชันการทำงานที่คล้ายกันเป็นเว็บไซต์ ebayclassifieds หรือสิ่งที่ฉันพยายามจะทำอย่างไร มันจะขึ้นอยู่กับอีเมลที่ยื่นในโหนด / เพิ่มแบบฟอร์ม (ฟังก์ชั่น CRUD)

คุณต้องการแนะนำทิศทางหรือสูตรอาหารเพื่อให้บรรลุหน้าที่การทำงานหรือไม่ แน่นอนเป้าหมายสูงสุดที่นี่คือการอนุญาตให้ผู้ใช้ anon โพสต์; สร้างบัญชีเบื้องหลังสำหรับการใช้งานในอนาคต อนุญาตให้ใช้แบบฟอร์ม anon แม้สำหรับผู้ใช้ที่มีอีเมลที่มีบัญชีอยู่แล้ว (และกำหนดเนื้อหาให้สอดคล้องกัน) ทั้งหมดในขณะที่รักษาความปลอดภัย (จากสแปมบอท) ที่จ่ายได้โดยการลงชื่อสมัครใช้และรับรองความถูกต้องของบัญชี

แก้ไข: 4/1/2013 Gisle Hannemyr ได้ฟื้นฟูโมดูลการเผยแพร่โดยไม่ระบุชื่อซึ่งใกล้เคียงกับการบรรลุเป้าหมายที่อธิบายไว้ที่นี่และในโพสต์อื่น ๆ โปรดมีส่วนร่วมในเธรดเพื่อให้ข้อเสนอแนะแก่ชุมชนเกี่ยวกับวิธีทำให้โมดูลบั๊กฟรีและดีกว่า: http://drupal.org/node/1957644


ฉันถามคำถามที่คล้ายกันสักครู่: drupal.stackexchange.com/questions/25194/…
paul-m

OAuth / OpenID จะมากเกินไปสำหรับผู้ใช้ของคุณหรือไม่ Janrain ทำให้การเข้าสู่ระบบเป็นเรื่องง่าย
Capi Etheriel

ฉันไม่เคยได้ยินเกี่ยวกับ Janrain แต่ฉันชอบความคิดของผู้ที่ใช้บัญชีอื่นเพื่อเข้าสู่ระบบ ชอบที่นี่ใน DSE ฉันใช้บัญชี Google ของฉันเสมอ ง่ายเหมือนที่?
blue928

คำตอบ:


7

ฉันไม่คิดว่ามันเป็นไปได้ด้วยกฎเดียว

คุณต้องเปลี่ยนแบบฟอร์มการส่งเพื่อจับที่อยู่อีเมลยืนยันและคุณต้องมีเหตุผลบางอย่างเพื่อห้ามผู้ส่งอีเมลขยะและรู้จักผู้เยี่ยมชมที่กลับมา

ผมดูแลของโครงการชื่อสำนักพิมพ์ไม่ประสงค์ออกนาม ดูเหมือนว่าโมดูลนี้ทำในสิ่งที่คุณต้องการ

มันยังอยู่ในการพัฒนา แต่มีการใช้งาน 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 และอื่น ๆ
  • คุณสามารถเปลี่ยนตัวเลือกการลงทะเบียนเพื่อไม่ต้องการการยืนยันอีเมล

ในการตอบคำถามสุดท้ายของคุณ:

คุณต้องการแนะนำทิศทางหรือสูตรอาหารเพื่อให้บรรลุหน้าที่การทำงานหรือไม่ แน่นอนเป้าหมายสูงสุดที่นี่คือการอนุญาตให้ผู้ใช้ anon โพสต์; สร้างบัญชีเบื้องหลังสำหรับการใช้งานในอนาคต อนุญาตให้ใช้แบบฟอร์ม anon แม้สำหรับผู้ใช้ที่มีอีเมลที่มีบัญชีอยู่แล้ว (และกำหนดเนื้อหาให้สอดคล้องกัน) ทั้งหมดในขณะที่รักษาความปลอดภัย (จากสแปมบอท) ที่จ่ายได้โดยการลงชื่อสมัครใช้และรับรองความถูกต้องของบัญชี

ฉันแนะนำให้ใช้คุณสมบัติ "การลงทะเบียนโหนดแบบไม่ระบุชื่อ" (ฉันสามารถแชร์รหัสได้หากต้องการ) ฉันเพิ่มฟิลด์ "name" และ "email address" ให้กับฟอร์ม "node add"

หากไม่มีอีเมลอยู่แล้วระบบจะสร้างบัญชีผู้ใช้ใหม่ มันใช้ชื่อเพื่อสร้างชื่อผู้ใช้และเพิ่มหมายเลขหากจำเป็นเพื่อให้มันไม่ซ้ำกัน

รหัสผ่านจะถูกตั้งค่าแบบสุ่มและแสดงต่อผู้ใช้หลังจากส่งโหนดพร้อมลิงก์เพื่อเปลี่ยนรหัสผ่าน

นอกจากนี้การยืนยันอีเมลจะไม่ป้องกันไม่ให้บอทสแปมลงทะเบียน ฉันขอแนะนำโมดูลสแปมบอ


2
คุณพูดถึงรหัสที่คุณสามารถแบ่งปันได้ ถ้าอย่างนั้นคุณได้เขียนโมดูลสำหรับใช้เองแล้ว? ฉันอยากจะดูมันถ้าคุณต้องการที่จะทำให้มันออนไลน์ที่ไหนสักแห่ง ขอบคุณ!
blue928

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.