Danilo Pessoa 0 Denunciar post Postado Dezembro 20, 2011 Bom dia Galera... Estou com o seguinte problema no meu site Joomla. Temos um importador de dados que funciona perfeitamente. Mas temos um pequeno problema na função que criptografa a senha do joomla antes de Gravar no Banco de Dados, abaixo segue o código da função de criptografia Joomla: $grade .= "<tr><td></td>"; for($b = 0; $b < $qtdeCampos; $b ++) { $grade .= "\n<td><select id='c" . $b . "' name='c" . $b . "'>\n"; $grade .= "<option value=''></option>\n"; $grade .= $b == 46 ? "<option selected=\"selected\" value='46'>Senha</option>\n":"<option value='46'>Senha</option>\n"; // Antes desse tem mais 45 campos } $grade .= "</tr></table>"; $this->view->grade = $grade; for($a = 0; $a < 100; $a ++) { $campoAtual = JRequest::getVar ( "c" . $a ); if ($campoAtual == '46') { $senhalogin = $a; } } $_SESSION ["CAMPO_SENHA"] = $senhalogin; $SENHALOGIN = $campos [$_SESSION ['CAMPO_SENHA']]; $salt = 'UVCLG0Hkt7UtZBRoYVfwIaAmIXg28gGx'; $crypt = JUserHelper::getCryptedPassword ( $SENHALOGIN, $salt ); $PASSWORD = $crypt . ':' . $salt; $db->setQuery ( "insert into jos_users (name, username, email, password, usertype, block, sendEmail, gid, registerDate, activation) values ('" . $NOMEFANTASIA . "', '" . $LOGIN . "','" . $EMAIL . "', '" . $PASSWORD . "', 'Registered',0,0,18,'" . date ( "Y-m-d" ) . "','')" ); $db->query (); Tudo acima funciona, a função criptografa tudo certinho, mas quando tento logar com algum usuário no site da a mensagem de "Nome de usuário e senha não conferem ou você ainda não possui uma conta.". O que será que tem errado no meu código? Quem puder ajudar agradeço muito. Abraço! Aguardo retornos. Compartilhar este post Link para o post Compartilhar em outros sites
walace 1 Denunciar post Postado Dezembro 21, 2011 Tenho um script aqui que faz isso, talvez o que esteja faltando é você gravar todas as tabelas que o joomla usa durante o logon: Para o usuário é simples, gravei estes campos e fechou, é só você ver a sequencia na estrutura das tabelas, note que para a senha eu usei a função md5: $sql ="INSERT INTO ".SYSDBPREFIX."users VALUES (0,"; $sql.="'".$_POST['name']."',"; $sql.="'".$_POST['username']."',"; $sql.="'".$_POST['email']."',"; $sql.="md5('".$_POST['password']."'),"; $sql.="'Registered',0,0,18,now(),"; $sql.="'0000-00-00 00:00:00','','');"; Depois disto eu ainda gravo o mesmo usuário nas tabelas core_acl_aro e core_acl_groups_aro_map. Eu acho que é aí que está o x da questão para você. Tente ver se consegue algo, qualquer coisa posta aí que vamos dando uma olhada. Achei o script onde faço isto e grava todas as tabelas, os dados vem de um form simples, gravo jos_users, coloco o id salvo por mysql_insert_id() e vou gravando nas outras duas tabelas. //Grava registro de usuario $sql ="INSERT INTO ".SYSDBPREFIX."users VALUES (0,"; $sql.="'".$_POST['name']."',"; $sql.="'".$_POST['username']."',"; $sql.="'".$_POST['email']."',"; $sql.="md5('".$_POST['password']."'),"; $sql.="'Registered',0,0,18,now(),"; $sql.="'0000-00-00 00:00:00','','');"; $query=mysql_query($sql,ConexaoMysql::connect()); if (!query) { echo "<script>alert('Erro inserindo registro de Usuários !');</script>"; exit(); } $idusers = mysql_insert_id(); //Grava tabela do joomla jos_core_acl_aro $sql ="INSERT INTO ".SYSDBPREFIX."core_acl_aro VALUES (0,'users',".$idusers.",0,'".$_POST['name']."',0);"; $query=mysql_query($sql,ConexaoMysql::connect()); if (!query) { echo "<script>alert('Erro inserindo registro de Usuários (core_acl_aro)!');</script>"; exit(); } $idcore = mysql_insert_id(); //Grava tabela do joomla jos_core_acl_groups_aro_map $sql ="INSERT INTO ".SYSDBPREFIX."core_acl_groups_aro_map VALUES (18,'',".$idcore.");"; $query=mysql_query($sql,ConexaoMysql::connect()); if (!query) { echo "<script>alert('Erro inserindo registro de Usuários (core_acl_groups_aro_map)!');</script>"; exit(); } Compartilhar este post Link para o post Compartilhar em outros sites
Danilo Pessoa 0 Denunciar post Postado Dezembro 21, 2011 Bom dia Walace, Esse script que você passou é importante e pode ser usado em diversas ocasiões. Nos meu Projetos eu utilizo o ZendFramework. Eu revirei o meu código e localizei um erro grotesco meu e outro no arquivo do meu cliente. Percebi que em alguns campos de senhas contem espaços, então eu tive que apenas adicionar um "trim" na variável que continha a senha e já resolveu. Abaixo segue o trecho do código já corrigido. Obrigado pela ajuda. Um Abraço! $SENHALOGIN = $campos [$_SESSION ['CAMPO_SENHA']]; $salt = 'UVCLG0Hkt7UtZBRoYVfwIaAmIXg28gGx'; $crypt = JUserHelper::getCryptedPassword ( trim($SENHALOGIN), $salt ); $PASSWORD = $crypt . ':' . $salt; Compartilhar este post Link para o post Compartilhar em outros sites