Como usuários anônimos podem postar, mantendo a integridade do conteúdo?

8

Um pouco de fundo: como você vê em http://charlotte.ebayclassifieds.com , se você clicar em 'postar um anúncio' e escolher uma categoria, poderá preencher o formulário e enviar o conteúdo sem precisar se inscrever. Tudo isso é feito e gerenciado enviando e-mails de validação para o campo de endereço de e-mail que, quando clicado, permite ao usuário manipular seu conteúdo.

Funcionalidades semelhantes podem ser alcançadas no Drupal. Não me importo de escrever um módulo, mas antes disso, quero ter certeza de que não estou reinventando a roda.

Eu tenho um site de classificados locais baseado no Drupal para minha comunidade em http://www.gastonia.com . O site está crescendo em tráfego anônimo, mas poucos usuários estão se inscrevendo para postar. Depois de alguns ciclos de feedback com a comunidade, quase todo mundo está dizendo que a única barreira à entrada é ter que se inscrever em uma conta, verificar e-mail, validar, descobrir como navegar para publicar um anúncio, etc. - de fato, existem 7 etapas necessário passar antes que um anúncio seja realmente publicado. É muito..

Nós reformulamos a arquitetura para poder reduzi-la a dois cliques - clique para postar e, em seguida, clique para salvar. Mais especificamente, um usuário clica em 'Adicionar conteúdo' e o nó / formulário é exibido (agora existe apenas um tipo de conteúdo na nova arquitetura); Então, quando terminarem, eles clicarão em salvar.

Originalmente, pensei no módulo Registro em linha , mas ele ainda está no DEV e a lógica realmente não existe para dar suporte se o usuário voltar a postar novamente com o mesmo endereço de e-mail (sem fazer login). Eu poderia alterá-lo, mas voltamos a escrever um módulo.

Também pensei em Regras - as regras poderiam lidar com funcionalidades semelhantes às do site ebayclassifieds ou o que estou tentando fazer? Tudo seria baseado em um email arquivado no nó / adicionar formulário (funcionalidade CRUD).

Que direção ou receita você sugeriria para alcançar a funcionalidade? Obviamente, o objetivo final aqui é permitir que usuários não postem; criar uma conta nos bastidores para uso futuro; permita o uso do formulário anon, mesmo para usuários com e-mails que já possuem contas (e atribua conteúdo de acordo.) enquanto mantém a segurança (de spam, bots) oferecida por um usuário se inscrever e autenticar uma conta.

EDIT: 01/04/2013 Gisle Hannemyr reviveu o módulo Anonymous Publishing, que está muito próximo de alcançar os objetivos descritos aqui e em outros posts. Participe do tópico para fornecer algum feedback da comunidade sobre como tornar o módulo livre e melhor de erros: http://drupal.org/node/1957644

blue928
fonte
Eu fiz uma pergunta semelhante há um tempo: drupal.stackexchange.com/questions/25194/…
paul-m
OAuth / OpenID seria demais para seus usuários? Janrain facilita o login.
Capi Etheriel
Nunca ouvi falar do Janrain, mas gosto da ideia de pessoas que usam outras contas para fazer login. Como aqui no DSE, eu uso minha conta do Google sempre. Tão simples como isso?
blue928

Respostas:

7

Eu não acho que isso seja possível apenas com regras.

Você precisa alterar o formulário de envio para capturar o endereço de email de verificação e também precisa de alguma lógica para banir os spammers e reconhecer os visitantes que retornam.

Eu sou o mantenedor de um projeto chamado Anonymous Publishing . Parece que este módulo faz o que você deseja.

Ainda está em desenvolvimento, mas uma versão do Drupal 7 foi usada em vários dos meus locais de produção sem problemas. Por favor, confira.

Você também pode procurar as respostas nesta pergunta .

Radical livre
fonte
Obrigado por isso, passará algum tempo verificando o código!
blue928
Criei um tópico em drupal.org/node/1957644 para ver se não conseguimos uma discussão ativa sobre esse módulo. Obrigado por reviver isso.
blue928
2

Consegui algo semelhante a isso em um projeto recente, criando um novo retorno de chamada de menu - algo como example.com/anon_user- que fornece um formulário que funciona como um login e um formulário de registro. Isso permite que o usuário passe rapidamente pelo processo de registro OU faça o login sem fazê-lo executar muitas ações. Na verdade, foi recebido razoavelmente bem.

Aqui está um código simplificado para demonstrar isso:

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

Valide-o como você precisar:

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

No manipulador de envio, precisamos descobrir se esse email já existe e tentar fazer login. Se ele não existir, tente criar uma conta para eles.

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

Este é um exemplo bastante simples. Você pode adicionar requisitos de senha, confirmação de senha por meio de um segundo campo, um nome de usuário, avisos melhores, etc. Quanto mais restrições, maior o processo, então isso é algo a ser lembrado.

Charlie Schliesser
fonte
2

Existem várias maneiras de reduzir o "obstáculo ao registro":

  • use o Facebook connect para permitir o login com uma conta do facebook (eu uso e gosto do módulo fboauth )
  • existem outros módulos de login social que suportam google, paypal, yahoo, openid, etc.
  • você pode alterar a opção de registro para não exigir confirmações por email.

Para responder sua última pergunta:

Que direção ou receita você sugeriria para alcançar a funcionalidade? Obviamente, o objetivo final aqui é permitir que usuários não postem; criar uma conta nos bastidores para uso futuro; permita o uso do formulário anon, mesmo para usuários com e-mails que já possuem contas (e atribua conteúdo de acordo.) enquanto mantém a segurança (de spam, bots) oferecida por um usuário se inscrever e autenticar uma conta.

Sugiro usar um recurso de "registro de nó anônimo" (posso compartilhar código, se quiser). Eu adiciono os campos "nome" e "endereço de email" a um formulário "adicionar nó".

Se o email ainda não existir, ele criará uma nova conta de usuário. Ele usa o primeiro nome para criar o nome de usuário e adiciona números, se necessário, para torná-lo único.

A senha é configurada aleatoriamente e exibida ao usuário após o envio do nó com um link para alterar a senha.

Além disso, as confirmações por email não impedirão a inscrição de robôs de spam. Eu recomendo o módulo spambot .

uwe
fonte
2
Você mencionou o código que poderia compartilhar. Então você já escreveu um módulo para seu próprio uso? Gostaria de dar uma olhada, se você quiser colocá-lo online em algum lugar. Obrigado!
blue928
2

Agora também há este módulo: Criar e registrar

cdmo
fonte