콘텐츠 무결성을 유지하면서 익명 사용자가 게시 할 수있는 방법은 무엇입니까?


8

약간의 배경 지식 : http://charlotte.ebayclassifieds.com 에서 볼 수 있듯이 '광고 게시'를 클릭 한 후 카테고리를 선택하면 가입하지 않고도 양식을 작성하고 콘텐츠를 제출할 수 있습니다. 클릭하면 사용자가 자신의 컨텐츠를 조작 할 수있는 이메일 주소 필드에 유효성 검증 이메일을 보내어 모든 작업을 수행하고 관리합니다.

Drupal에서도 비슷한 기능을 수행 할 수 있습니다. 모듈을 작성하는 것은 마음에 들지 않지만 수행하기 전에 휠을 재발 명하지 않도록하고 싶습니다.

http://www.gastonia.com에 Drupal 기반 지역 광고 사이트가 있습니다. 사이트에서 익명의 트래픽이 증가하고 있지만 게시하려는 사용자는 거의 없습니다. 커뮤니티와의 피드백이 반복 된 후, 거의 모든 사람들이 진입 장벽 중 하나가 계정에 가입하고, 이메일을 확인하고, 확인하고, 광고를 게시하는 방법을 알아내는 등의 단계를 수행해야한다고 말합니다. 실제로 7 단계가 있습니다. 광고가 실제로 게시되기 전에 진행해야합니다. 너무 많아 ..

클릭 투 포스팅 (post to post), 클릭 투 저장 (click to save)으로 두 번의 클릭으로 줄일 수 있도록 아키텍처를 재 작업했습니다. 보다 구체적으로, 사용자가 '컨텐츠 추가'를 클릭하면 노드 / 추가 양식이 팝업됩니다 (현재 새 아키텍처에는 하나의 컨텐츠 유형 만 있음). 그런 다음 완료되면 저장을 클릭하십시오.

원래 인라인 등록 모듈 에 대해 생각 했지만 여전히 DEV에 있으며 사용자가 동일한 전자 메일 주소로 다시 로그인하여 다시 로그인하면 논리가 실제로 지원되지 않습니다 (로그인하지 않음). 변경할 수는 있지만 모듈 작성으로 돌아갑니다.

또한 규칙에 대해 생각했습니다. 규칙은 ebayclassifieds 사이트와 유사한 기능을 처리 할 수 ​​있습니까? 모두 노드 / 추가 양식 (CRUD 기능)으로 제출 된 이메일을 기반으로합니다.

기능을 달성하기 위해 어떤 방향이나 레시피를 제안 하시겠습니까? 물론 여기서 궁극적 인 목표는 익명 사용자가 게시 할 수 있도록하는 것입니다. 나중에 사용하기 위해 배후에 계정을 만듭니다. 사용자가 계정을 등록하고 인증함으로써 제공되는 보안 (스팸, 봇)을 유지하면서 이미 계정이있는 전자 메일을 가진 사용자 (그리고 그에 따라 콘텐츠를 할당하는 경우)에서도 익명 양식을 사용할 수 있습니다.

편집 : 2013 년 4 월 1 일 Gisle Hannemyr는 여기 및 다른 게시물에 설명 된 목표를 달성하는 데 매우 가까운 익명 게시 모듈 을 부활 시켰 습니다. 스레드에 참여하여 모듈 버그를 무료로 개선하는 방법에 대한 커뮤니티 피드백을 제공 하십시오 . http://drupal.org/node/1957644


비슷한 질문을 한 적이 있습니다 : drupal.stackexchange.com/questions/25194/…
paul-m

OAuth / OpenID가 사용자에게 너무 많습니까? Janrain은 로그인하기가 쉽습니다.
Capi Etheriel

Janrain에 대해 들어 본 적이 없지만 다른 계정을 사용하여 로그인하는 사람들의 아이디어를 좋아합니다. 여기 DSE에서와 같이 항상 Google 계정을 사용합니다. 저것과 같이 쉬운?
blue928

답변:


7

나는 이것이 규칙만으로는 가능하다고 생각하지 않습니다.

확인 이메일 주소를 캡처하려면 제출 양식을 변경해야하며 스패머를 금지하고 재 방문자를 인식하는 논리도 필요합니다.

저는 Anonymous Publishing 이라는 프로젝트의 관리자입니다 . 이 모듈이 원하는 것을 수행하는 것처럼 보입니다.

아직 개발 중이지만 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 연결을 사용하여 페이스 북 계정으로 로그인 허용 ( fboauth 모듈 사용 및 유사 )
  • 구글, 페이팔, 야후, openid 등을 지원하는 다른 소셜 로그인 모듈이 있습니다.
  • 이메일 확인이 필요하지 않도록 등록 옵션을 변경할 수 있습니다.

마지막 질문에 대답하려면 :

기능을 달성하기 위해 어떤 방향이나 레시피를 제안 하시겠습니까? 물론 여기서 궁극적 인 목표는 익명 사용자가 게시 할 수 있도록하는 것입니다. 나중에 사용하기 위해 배후에 계정을 만듭니다. 사용자가 계정을 등록하고 인증함으로써 제공되는 보안 (스팸, 봇)을 유지하면서 이미 계정이있는 전자 메일을 가진 사용자 (그리고 그에 따라 콘텐츠를 할당하는 경우)에서도 익명 양식을 사용할 수 있습니다.

"익명 노드 등록"기능을 사용하는 것이 좋습니다 (원하는 경우 코드를 공유 할 수 있음). "이름"과 "이메일 주소"필드를 "노드 추가"양식에 추가합니다.

이메일이 존재하지 않으면 새 사용자 계정이 생성됩니다. 이름을 사용하여 사용자 이름을 만들고 필요한 경우 고유 한 번호를 추가합니다.

비밀번호 변경 링크가있는 노드를 제출 한 후 비밀번호가 임의로 설정되어 사용자에게 표시됩니다.

또한 이메일 확인으로 스팸 봇이 등록되지 않습니다. 스팸봇 모듈을 강력히 추천합니다 .


2
공유 할 수있는 코드를 언급했습니다. 그럼 당신은 이미 당신 자신의 사용을위한 모듈을 작성 했습니까? 어딘가에 온라인으로 올리려면 살펴보고 싶습니다. 감사!
blue928

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.