- 1
[Opened] Problème envois de message
Posted by criz on 08/09/2011 10:48
Bonjour tlm, voila depuis hier j'ai un souci (qui devrai pas en être un lol) ^^ Je vous explique, j'ai mis en place il y a pas longtemps un système de validation de compte par email. Maintenant je mets en place une vérification des comptes valides (ou pas) quand un utilisateur veut se connecté (cad quand un utilisateur n'a pas validé son compte il y a un message en java-script qui apparait et on lui renvois un mail (automatiquement) avec le lien d'identification et ces identifiants. Avec ce que j'ai fais quand je rentre un utilisateur qui n'a pas validé son compte j'ai un message d'erreur:
"NetworkError: 500 Internal Server Error - http://www.dressingenligne.fr/membres/connexionMembreCom?login=****&pass=****"{"errorCode":200,"errorMessage":"[[exception]] Une erreur technique est survenue. D\u00e9sol\u00e9 pour ce d\u00e9sagr\u00e9ment. (file: , line: )"}
Voici le code:
membre.classic.php
<code>function connexionMembreCom() { $rep = $this->getResponse('json'); $login = $this->param("login"); $pass = $this->param("pass"); if (Membre::membreValid($login)== 0) { $conn = 3; Membre::renvoisMailValidation($login); $rep->data = array("conn" => $conn,'url_blog' => ''); } elseif (!Membre::connecterPortail($login,$pass)){ $conn = 0; $rep->data = array("conn" => $conn,'url_blog' => ''); }</code>
membe.class.php
public static function renvoisMailValidation($login){ <code> $identifiant_membre= self::getMembreByLogin2($login); $MembreDao = jDao::get("dressingenligne~membre"); $membre = $MembreDao->get($identifiant_membre);
//envoi mail au membre
$tpl = new jTpl(); $tpl->assign("membre", $membre); $tpl->assign("page",0); $tpl->assign('url_page_perso', 0); $mail = new jMailer(); //$mail->isHTML(true); $mail->Subject = 'Confirmation inscription membre de dressing en ligne'; // $mail->Body = $tpl->fetch('dressingenligne~email_inscription', 'html'); $mail->Body = 'Contenu du message texte'; $mail->AddAddress($membre->email , $membre->nom.' '.$membre->prenom); $mail->Send();
} public static function getMembreByLogin2($zLogin) {
$oMembreDao = jDao::get("dressingenligne~membre"); $tmp = $oMembreDao->getMembreBylogin($zLogin); return tmp; }</code>
membre.dao.xml
<code><method type="php" name="getMembreBylogin"> <parameter name="login" /> <body><![CDATA[ $sql = "SELECT identifiant_membre FROM membre WHERE login='".$login."' LIMIT 1"; $rs = $this->_conn->query($sql); $rs->setFetchMode(8,$this->_DaoRecordClassName); $record = $rs->fetch(); $tmp = $record->identifiant_membre; return $tmp; ]]></body> </method></code>
le java-script:
$("#connect_btn_menu").click(function () { <code> var login = $("#login_menu").val(); var pass = $("#pass_menu").val(); urlConnexion = jurl_portail_membre_connexionmembrecom; urlConnexion += "?login=" + login + "&pass=" + pass; $.getJSON(urlConnexion, function (data) { var conn = data.conn; if (conn == 0) { alert("Login ou mot de passe incorrect"); } else if (conn == 3) { //alert("Votre compte n'est pas encore validé, un nouveau mail avec vos identifiants et votre lien de validation vient de vous ecirc; renvoyé."); alert("Votre compte n'est pas encore valide ."); }else{ $("#login_form_menu").submit(); } }) });</code>
Merci pour votre aide. Christophe
[Opened] Problème envois de message
Posted by laurentj on 08/09/2011 22:42
Bonjour,
Déjà, il faut que tu récupère le vrai message d'erreur. Si c'est jelix 1.2 ou inférieur, configure jelix pour qu'il affiche la vraie erreur (pas de ECHOQUIET). Si c'est jelix 1.3, regarde dans le répertoire var/log.
Parce que là, on ne sait pas ce qui cause l'erreur.
Sinon beaucoup de choses ne vont pas dans ton code.
Tu te compliques la vie avec ton getMembreByLogin dans ton DAO. Pourquoi faire une requête pour récupérer l'identifiant à partir de login, et faire ensuite une deuxième requête pour récupérer les données de l'utilisateur ? Alors que tu pourrais récupèrer ces données directement à partir du login. Sans compter que tu n'aurais pas à faire une méthode de type PHP :
<method name="getMembreByLogin" type="selectfirst"> <code> <parameter name="login" /> <conditions> <eq property="login" expr="$login" /> </conditions></method> </code>
Dans ta classe, alors :
public static function renvoisMailValidation($login){ <code> $MembreDao = jDao::get("dressingenligne~membre"); $membre = $MembreDao->getMembreByLogin($login);</code>
De plus, cela t'évite d'avoir un gros trou de sécurité. Dans ton getMembreByLogin, tu n'échappe même pas ton paramètre $login. Un bel exemple de vulnérabilité de type SQL injection ;-)
Au sujet de l'utilisation de jMailer, regarde son API, tu peux lui indiquer un template directement plutôt que de devoir gérer toi même un jtpl.
Autre problème de sécurité : dans ton javascript, tu envoi les données en GET. Du coup c'est sympa, les logins/mots de passe apparaissent dans les logs apache et cie :-p. Il faut envoyer au moins en POST ! De plus tu n'urlencode pas les paramètre login/mot de passe. si il y a des caractère spéciaux, l'url ne va pas être valide...
Enfin, je ne trouve pas que ce soit une bonne idée d'envoyer un mail à chaque tentative d'identification. Bonjour le spam. Il est préférable de proposer et laisser l'utilisateur demander explicitement l'envoi du mail (par un lien ou un bouton...)
Et sinon, tu devrais t'intéresser à jAuth et au module jCommunity, cela t'éviterai de réinventer la roue ;-)
- 1