Làm thế nào người dùng ẩn danh có thể được phép đăng trong khi vẫn duy trì tính toàn vẹn nội dung?


8

Một chút nền tảng: Như bạn thấy trên http://charlotte.ebayclassifieds.com , nếu bạn nhấp vào 'đăng quảng cáo' và sau đó chọn một danh mục, bạn có thể điền vào biểu mẫu và gửi nội dung mà không cần phải đăng ký. Tất cả điều này được thực hiện và quản lý bằng cách gửi email xác thực đến trường địa chỉ email, khi được nhấp, cho phép người dùng thao tác nội dung của họ.

Có thể đạt được chức năng tương tự trong Drupal. Tôi không ngại viết một mô-đun, nhưng trước khi tôi làm, tôi muốn chắc chắn rằng tôi không phát minh lại bánh xe.

Tôi có một trang web rao vặt địa phương dựa trên Drupal cho cộng đồng của mình tại http://www.gastonia.com . Trang web đang tăng lưu lượng truy cập ẩn danh, nhưng rất ít người dùng đăng ký để đăng bài. Sau một vài vòng phản hồi với cộng đồng, hầu hết mọi người đều nói rằng một rào cản gia nhập là phải đăng ký tài khoản, kiểm tra email, xác thực, tìm ra cách điều hướng để đăng quảng cáo, v.v. - thực sự có 7 bước cần thiết để đi qua trước khi một quảng cáo thực sự được xuất bản. Nó quá nhiều..

Chúng tôi đã làm lại kiến ​​trúc để có thể đưa nó xuống hai lần nhấp - nhấp để đăng, sau đó nhấp để lưu. Cụ thể hơn, người dùng nhấp vào 'Thêm nội dung' và nút / thêm biểu mẫu bật lên (hiện chỉ có một loại nội dung trong kiến ​​trúc mới); Sau đó, khi chúng được thực hiện, họ bấm lưu.

Ban đầu tôi nghĩ về mô-đun Đăng ký Nội tuyến , nhưng nó vẫn ở DEV và logic thực sự không có để hỗ trợ nếu người dùng quay lại đăng lại với cùng một địa chỉ email (không đăng nhập). Tôi có thể thay đổi nó, nhưng sau đó chúng tôi quay lại viết một mô-đun.

Tôi cũng đã nghĩ về Rules - các quy tắc có thể xử lý chức năng tương tự như trang ebay phân loại hay tôi đang cố gắng làm gì? Tất cả sẽ dựa trên một email được gửi trong nút / thêm biểu mẫu (chức năng CRUD).

Hướng hoặc công thức nào bạn sẽ đề nghị để đạt được các chức năng? Tất nhiên mục tiêu cuối cùng ở đây là cho phép người dùng anon đăng bài; tạo một tài khoản đằng sau hậu trường để sử dụng trong tương lai; cho phép sử dụng biểu mẫu anon ngay cả đối với người dùng có email đã có tài khoản (và gán nội dung phù hợp.) trong khi vẫn duy trì bảo mật (từ spam, bot) được cung cấp bằng cách người dùng đăng ký và xác thực tài khoản.

EDIT: 4/1/2013 Geway Hannemyr đã hồi sinh mô-đun Xuất bản ẩn danh rất gần với việc đạt được các mục tiêu được mô tả ở đây và trong các bài đăng khác. Vui lòng tham gia chuỗi để cung cấp một số phản hồi của cộng đồng về cách làm cho lỗi mô-đun miễn phí và tốt hơn: http://drupal.org/node/1957644


Tôi đã hỏi một câu hỏi tương tự một lúc trước: drupal.stackexchange.com/questions/25194/iêu
paul-m

OAuth / OpenID có quá nhiều cho người dùng của bạn không? Janrain làm cho nó dễ dàng để đăng nhập.
Capi Etheriel

Tôi chưa bao giờ nghe về Janrain, nhưng tôi thích ý tưởng mọi người sử dụng các tài khoản khác để đăng nhập. Giống như ở đây trên DSE tôi sử dụng tài khoản google của tôi luôn. Đơn giản vậy thôi?
blue928

Câu trả lời:


7

Tôi không nghĩ rằng điều này là có thể với các quy tắc một mình.

Bạn cần thay đổi biểu mẫu gửi để nắm bắt địa chỉ email xác minh và bạn cũng cần một số logic để cấm người gửi thư rác và nhận ra khách truy cập quay lại.

Tôi là người duy trì một dự án có tên là Nhà xuất bản ẩn danh . Có vẻ như mô-đun này làm những gì bạn muốn.

Nó vẫn đang được phát triển, nhưng một phiên bản Drupal 7 đã được sử dụng tại một số trang sản xuất của tôi mà không gặp vấn đề gì. Làm ơn hãy kiểm tra nó.

Bạn cũng có thể muốn xem các câu trả lời dưới câu hỏi này .


Cảm ơn vì điều đó, sẽ dành thời gian kiểm tra mã!
blue928

Tôi đã tạo một chủ đề tại drupal.org/node/1957644 để xem liệu chúng ta có thể có một cuộc thảo luận tích cực về mô-đun đó không. Cảm ơn vì đã hồi sinh điều đó.
blue928

2

Tôi đã đạt được một cái gì đó tương tự như thế này trong một dự án gần đây bằng cách tạo một cuộc gọi lại menu mới - một cái gì đó giống như example.com/anon_user- cung cấp một hình thức nhân đôi như một đăng nhập và một hình thức đăng ký. Điều này cho phép người dùng rất nhanh chóng trải qua quá trình đăng ký HOẶC đăng nhập mà không khiến họ thực hiện quá nhiều hành động. Nó thực sự đã được nhận khá tốt.

Đây là một số mã đơn giản để chứng minh điều này:

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

Xác thực nó theo cách bạn cầ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.');
  }
}

Trong trình xử lý gửi, chúng tôi cần tìm hiểu xem email này đã tồn tại chưa và cố gắng đăng nhập chúng. Nếu nó không tồn tại, hãy thử tạo một tài khoản cho chúng.

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

Đây là một ví dụ khá đơn giản. Bạn có thể thêm các yêu cầu mật khẩu, xác nhận mật khẩu thông qua trường thứ 2, trường tên người dùng, cảnh báo tốt hơn, v.v. Càng nhiều hạn chế thì quá trình càng dài, vì vậy đó là điều cần lưu ý.


2

Có nhiều cách bạn có thể đi về việc hạ thấp "rào cản đăng ký":

  • sử dụng kết nối Facebook để cho phép đăng nhập bằng tài khoản facebook (tôi sử dụng và thích mô-đun fboauth )
  • có các mô-đun đăng nhập xã hội khác hỗ trợ google, paypal, yahoo, openid, v.v.
  • bạn có thể thay đổi tùy chọn đăng ký để không yêu cầu xác nhận email.

Để trả lời câu hỏi cuối cùng của bạn:

Hướng hoặc công thức nào bạn sẽ đề nghị để đạt được các chức năng? Tất nhiên mục tiêu cuối cùng ở đây là cho phép người dùng anon đăng bài; tạo một tài khoản đằng sau hậu trường để sử dụng trong tương lai; cho phép sử dụng biểu mẫu anon ngay cả đối với người dùng có email đã có tài khoản (và gán nội dung phù hợp.) trong khi vẫn duy trì bảo mật (từ spam, bot) được cung cấp bằng cách người dùng đăng ký và xác thực tài khoản.

Tôi đề nghị sử dụng tính năng "đăng ký nút ẩn danh" (tôi có thể chia sẻ mã nếu bạn muốn). Tôi thêm các trường "tên" và "địa chỉ email" vào biểu mẫu "thêm nút".

Nếu email chưa tồn tại, nó sẽ tạo một tài khoản người dùng mới. Nó sử dụng tên đầu tiên để tạo tên người dùng và thêm số nếu cần thiết để làm cho nó là duy nhất.

Mật khẩu được đặt ngẫu nhiên và hiển thị cho người dùng sau khi gửi nút có liên kết để thay đổi mật khẩu.

Ngoài ra, xác nhận email sẽ không ngăn chặn các bot spam đăng ký. Tôi rất khuyến khích các mô-đun spambot .


2
Bạn đã đề cập mã bạn có thể chia sẻ. Sau đó, bạn đã viết một mô-đun cho sử dụng của riêng bạn đã? Tôi muốn xem thử nếu bạn muốn đặt nó trực tuyến ở đâu đó. Cảm ơn!
blue928

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.