Drupal:personalizando o registro do usuário de fluxo de trabalho para comunicação com o outro webapp
-
22-09-2019 - |
Pergunta
Eu sou novo para Drupal6 e passou um longo tempo na busca de como implementar o seguinte recurso, sem sucesso:Eu uso o Drupal como front-end/doc conselho para um web-app.Eu quero o espelho de todas as contas de utilizador de criação, atualização e a exclusão neste web-app, i.é.enviar nome de usuário e senha.
Eu comecei a programar um pouco módulo de execução hook_user
(http://api.drupal.org/api/function/hook_user/6), mas eu ainda estou querendo saber sobre várias pergunta sobre este gancho:
1) eu não consigo encontrar um doc sobre o $account
campos, e, portanto, não sei como recuperar o nome de usuário e senha.
2) O insert
operação informa que "A conta de utilizador está a ser adicionado".É que, acionado quando o usuário consulta de uma conta ou quando o seu/sua pendentes de criação de conta foi aprovada?
3) gerenciamento de usuários sobre o 'escravo' webapp é feito através de uma URL interface.Eu só sei o header("Location: http://webapp/users/add?user=martin&pwd=bla")
PHP primitivo, mas eu temo que isso vai fazer um redirecionamento, em vez de apenas batia a página de destino e continuar o fluxo de código.Alguma sugestão?
Talvez alguns de vocês já programado como um módulo, ou teria links para documentação mais?
Obrigado antecipadamente,
Martin
Solução 4
Aqui está a peça final de código que funciona. Observe que a senha é recuperada MD5ified, para que o WebApp escravo também possa fazer isso:
function mirror_registration_user($op, &$edit, &$account, $category = NULL) {
$cmd = 'http://www.example.com/register?name='.$account->name.'&pass='.$account->pass;
if($op == 'insert'){
$cmd .= '&op=insert';
drupal_http_request( $cmd );
}
else if($op == 'delete'){
$cmd .= '&op=delete';
drupal_http_request( $cmd );
}
else if($op == 'after_update'){ // 'update' is a "before update event"
$cmd .= '&op=update';
drupal_http_request( $cmd );
}
}
Observação: No nosso caso, o registro requer aprovação do administrador. Nesse caso, há um evento de 'atualização'. O evento 'Insert' é acionado assim que o usuário consulte uma conta.
Informações para outros novatos:
Outras dicas
Dando um passo para trás e olhando para o quadro geral, você tem várias opções.
- Use OpenID (há um módulo DRUPAL CORE para ele) para ambos os sites
- Use LDAP (há um bom módulo de contribuição Drupal para ele)
- Veja outros módulos oferecem compartilhamento de login de usuários com outros aplicativos (como http://drupal.org/project/phpbb ou http://drupal.org/project/moodle ou muitos outros) para inspiração
- Peça ao seu aplicativo da web usar a tabela de usuários do Drupal. Isso é relativamente fácil, pois o nome de usuário está lá em texto simples e a senha é apenas MD5'ED (para que não sejam sais ou qualquer coisa para enlamear as águas).
Basicamente, hook_user é errado.O que você precisa fazer é usar hook_form_alter para alterar o '#validar' parâmetro do formulário de login.Dessa forma, validar é passado para a função no seu módulo onde você está recebendo $form_values['username'] e $form_values['senha'].Você que passar na sua URL através de enrolar.Se ela retorna corretamente, devolver nada.Se não retornar, use form_set_error e ele vai negar o login.
Boa sorte!
Para apenas recuperar uma resposta de uma página, você pode usar drupal_http_request ()
E uma nota de segurança geral, verifique se você está autenticando e validando as solicitações entre aplicativos. Passar senhas em texto simples via GET Parâmetros sobre o HTTP também me deixa um pouco enjoado, mas não conheço seu aplicativo configurado.