Pesquisa no site
Itens ativos
Posts mais lidos hoje
Login do usuário
Assine o RSS do Drupal-BR
Autenticação através de um banco de dados externo no Drupal 6
Na empresa em que trabalho desenvolvi um módulo para permitir o login em um site Drupal 6 baseado nas informações presentes em um banco de dados Oracle externo. Abaixo segue o código das principais funções do módulo, que aqui chamarei de modulox. O módulo é bem simples e omiti apenas as funções para acesso ao banco de dados externo e a função que define o perfil do usuário baseado nas informações do banco de dados externo.
//implementação do hook_form_alter
//esta função altera qual função irá validar o formulário de login
function modulox_form_alter(&$form, $form_state, $form_id){
//esta expressão verifica se é o formulário que esta sendo submetido é o de login.
//Em caso afirmativo define uma nova função de validação
if (is_array($form['#validate']) && ($key = array_search('user_login_authenticate_validate', $form['#validate'])))
$form['#validate'][$key] = 'modulox_login_validate';//funcao que irá validar o formulário de login
}
//Esta função irá validar os dados submetidos pelo formulário de login
function modulox_login_validate($form, &$form_state) {
// obtem usuário e senha do formulario de login
$values = $form_state['values'];
$name = $values['name'];//usuário
$pass = $values['pass'];//senha
//Verifica se o usuário que está tentando logar é o administrador. Em caso positivo executa a
//autenticação normal através da função user_authenticate().
$result = db_query("SELECT uid FROM {users} WHERE name = '%s' AND uid = '1'", $name);
if ($account = db_fetch_object($result)) {
user_authenticate($values);
return;
}
/*
Aqui é feito o acesso ao banco de dados externo.
No caso do meu sistema, eu obtinha a senha criptografada do banco de dados externo para o usuário $name e armazenava esta senha na variável $senha.
*/
if(/*Aqui vai uma expressão que retorna verdadeiro se a senha do formulário de login ($pass) for a mesma do banco de dados externo ($senha) */){
$account = user_external_load($name);
if (isset($account->uid)) {
//Se o usuário já esta gravado no banco do Drupal,aqui é feito seu login
user_external_login($account);
}
else {
//Se este é o primeiro acesso do usuário, aqui ele gravado no banco de usuários do Drupal
// com uma senha qualquer e é feito seu acesso.
user_external_login_register($name, 'sgelogin');
}
}
else{
//Se a senha for inválida, aqui é feita a tentativa de logar pelo banco de usuários do Drupal.
user_authenticate($values);
}
}
Espero que esta dica seja útil.
Celso
- Se logue ou se registre para poder enviar comentários
- 311 leituras

