Développer avec RBS Change : Redirection page authentification en cas d'erreur

  • 73874.1

    30/01/2013 14:59


    mamous
    Rang : Expert
    Bonjour,

    J'ai surchargé le template de bloc d'authentification (input) du module users de manière à ce qu'il soit présent toujours dans l'entête de tous les templates des pages, je voulais faire de manière à ce que en cas d'erreur de saisie du login OU du mot de passe, on sera rediriger vers la page connexion de RBS.

    A noter que le comportement initiale d'RBS est qu'il ne vérifient les champs qu'au cas ou l'utilisateur saisit le login ET le mot de passe qui me parait un peu étrange!!!
    Pourriez vous de plus m'indiquer quelle classe php dois-je modifier pour remédier ce problème.
    SVP c'est un peu urgent et merci.

    Cordialement,

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 73874.2 en réponse à 73874.1 écrit par mamous

    31/01/2013 11:44


    Mathias
    Rang : Expert
    La logique qui test les infos saisies dans le block authentification sont dans la class du block, en l'occurence :
    users_BlockAuthenticationAction
    et le cas d'erreur est traité à la ligne 89 :
    else
    {
    	$message = LocaleService::getInstance()->transFO('m.users.frontoffice.authentication.badauthentication', array('ucf'));
    	$this->addError($message);
    	// For compatibility. Will be removed in 4.0.
    	$request->setAttribute('errors', array($message));
    }


    Pour pouvoir agir sur ce code, il te faut injecter le block, et faire en sorte que la class de ton nouveau block étende le block users_BlockAuthenticationAction.
    Ensuite il te faut recopier la méthode initialize et modifier le code au niveau de la ligne 89 pour y ajouter qqchose du type :
    $tag = 'leTagDeLaPageCible';
    $this->redirectToUrl(LinkHelper::getTagUrlForContext($tag));
    


    Du coup si tu n'es pas satifsait de la logique intial du block, c'est là aussi que ça se passe ;)

    Édité par Mathias 31/01/2013 11:44


    Développe sous linux Ubuntu 12.04 LTS Desktop
    Projet ecommerce core 3.6.7
  • 73874.3 en réponse à 73874.2 écrit par Mathias

    04/02/2013 09:39


    mamous
    Rang : Expert
    Bonjour,

    Je vous remerci pour votre réponse bien détaillée.

    J'ai effectué toutes les manip que vous m'avez expliqué et dans le nouveau block que j'ai ajouter qui injecte celui du module users j'ai ré-ecrit la fonction initialize en ajoutant les lignes suivantes:

    ....
    else
    	{
    	$message = LocaleService::getInstance()->transFO('m.users.frontoffice.authentication.badauthentication', array('ucf'));
    	$this->addError($message);
    	// For compatibility. Will be removed in 4.0.
    	$request->setAttribute('errors', array($message));
    	$tag = 'contextual_website_website_modules_customer_my-account';
    	$this->redirectToUrl(LinkHelper::getTagUrlForContext($tag))
    				}
    


    Ici et dans ce cas, j'ai obtenu 2 problèmes, le premier c'est que même si je m'authentifie avec les bons login & mot de passe , je suis aussi rediriger à la page mon compte et le deuxième c'est que en saisissant de faux login & mot de passe je me suis rediriger vers la page mon compte mais je perd les informations que j'ai déjà envoyer donc je reçoit un formulaire vide et normalement je voudrais avoir la page authentification avec le login et mot de passe deja saisis auparavant avec un jolie message d'erreur.

    Cordialement,

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 73874.4 en réponse à 73874.3 écrit par mamous

    04/02/2013 10:26


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Bonjour,

    Votre "problème" de redirection est lié aux lignes :
    $tag = 'contextual_website_website_modules_customer_my-account';
    $this->redirectToUrl(LinkHelper::getTagUrlForContext($tag));


    Si vous voulez rediriger vers une autre page, c'est ici qu'il faudra agir, ici la redirection se fait vers la page sur laquelle le tag "contextual_website_website_modules_customer_my-account" est définit.
        

    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
  • 73874.5 en réponse à 73874.4 écrit par Jean-Michel

    04/02/2013 10:50


    mamous
    Rang : Expert
    Bonjour Jean-Michel,

    Oui exactement, c'est ce que j'ai voulu faire dès le départ je vous ré-explique mon besoin, j'ai deja le bloc d'authentication dans l'entête de toutes les pages, je voulais faire de manière à ce que je redirige l'utilisateur, en cas d'erreur, vers la page mon-compte (qui est déja taggué par contextual_website_website_modules_customer_my-account) et dans laquelle il aura le login et le mot de passe qu'il a saisit auparavant avec le msg d'erreur 'Erreur d'authentification ".

    En ajoutant ces deux lignes là c'est bon pour la redirection mais sa se fait dans les 2 cas ce qui me parait bizarre.

    Si vous avez une autre façon de le faire, je suis toujours prenant et merci d'avance.

    Cordialement,

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 73874.6 en réponse à 73874.4 écrit par Jean-Michel

    08/02/2013 11:14


    mamous
    Rang : Expert
    Re-Bonjour,

    J'attends encore une réponse, le problème persiste encore.

    Merci.

    Cordialement

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 73874.7 en réponse à 73874.6 écrit par mamous

    08/02/2013 11:50


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Bonjour,

    Si le nom du tag est le même dans les 2 cas, c'est normal. Dans le second cas, redirigez vers une autre page ou un autre tag ne doit poser aucun problème.
    Avez-vous consulté la page sur les cas d'utilisation des blocs du wiki qui traite justement des problématiques de redirection?

    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
  • 73874.8 en réponse à 73874.7 écrit par Jean-Michel

    08/02/2013 12:16


    mamous
    Rang : Expert
    Bonjour,

    Mon problème c'est pas lié à la redirection, avec ces deux lignes je me suis rediriger vers la page comme j'ai voulu mais bon, le truc qui m'a parut bizarre c'est que même si je m'authentifie avec un bon login et mot de passe il entre toujours dans le else puisque je serais aussi rediriger vers la page mon compte!!
    Donc pour moi, le seul cas que j'ai voulu traité, c'est le cas ou l'utilisateur saisi un login et mot de passe incorrect donc il doit être rediriger et je dois garder au moin le message d'erreur.

    Merci.

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 73874.9 en réponse à 73874.8 écrit par mamous

    11/02/2013 11:37


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Bonjour,

    Ce cas est géré par défaut, en cas d'erreur d'authentification (login incorrect, ou mot de passe incorrect ou couple login/mot de passe incorrect) dans ce cas on redirige l'utilisateur vers la page d'authentification en donnant un le même message d'erreur, ne donnant pas d'information sur la nature de l'erreur. Tant qu'il y a une erreur d'authentification il est normal de rediriger l'utilisateur vers la page d'authentification en lui indiquant qu'il y a une erreur et c'est ce qui est implémenté par défaut.
    Ce que vous voulez peut être faire alors à ce moment c'est retourner un autre template pour le bloc d'authentification, à ce moment il faudra agir sur le retour de la méthode.

    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
  • 73874.10 en réponse à 73874.8 écrit par mamous

    11/02/2013 11:46


    mamous
    Rang : Expert
    Bonjour,

    A priori, le problème est un peu clarifier, le truc était que dans la méthode initialize on manipule une variable qui est déclarée dans le bloc d'origine en private donc , en surchargeant juste cette méthode là, lorsqu'on retourne pour exécuter la méthode execute on l'exécute avec une variable $currentuser qui est null, et c'est à cause de sa que je me suis rediriger dans les deux cas.

    Mais j'arrive pas à résoudre le deuxième problème, lorsque je saisi un faux login & mot de passe, je les perd vu que la page se recharge et s'initialise et du coup même le message d'erreur ne s'affiche plus!!!

    J'attends vos propositions et merci

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 73874.11 en réponse à 73874.9 écrit par Jean-Michel

    11/02/2013 11:54


    mamous
    Rang : Expert
    Bonjour Jean-Michel,

    Normalement sa doit être un comportement par défaut, mais bon point de vue code j'ai pas su ou dois-je le trouver.
    C'est suite à la réponse de Mr MathiasMarrillet que je me suis lancer dans les modifs.
    De plus, ce problème m'a parut lorsque j'ai fait de sorte à avoir toujours, dans tout les templates, le bloc d'authentification soit ouvert, avec un champs de login, mot de passe et submit, comme sa je peux, en étant dans n'importe quelle page m'authentifier sans changer de page courante.
    Mais en cas d'erreur, je dois me rediriger vers la page mon compte qqe soit ou je serais et sa je sais pas si c'est implémenter ou pas dans RBS parce que ce que j'ai trouvé en gros c'est toujours dans la page mon compte que je dois m'authentifier.

    J'espère que vous avez saisi la problèmatique!

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 73874.12

    11/02/2013 12:09


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Alors si je comprends bien le besoin est : avoir un bloc inclus sur toutes les pages qui propose le formulaire de login mais n'a pas la place pour afficher le message d'erreur. Du coup l'idée retenue est de rediriger en cas d'erreur sur la page de login dédiée puis une fois qu'on est logué, on revient à la page initiale.


    Alors si c'est bien ça, voilà comment moi je vois les choses :

    1) Un bloc spécifique présent sur toutes les pages sans aucune logique avec juste le formulaire de login, qui soumet directement vers une page de login contenant le bloc d'authentification (users_BlockAuthenticationAction). Comme on poste le formulaire vers elle, elle obtiendra bien les login et mot de passe, ce qui n'est pas le cas avec un redirect (à moins de mettre le mot de passe en clair dans l'URL de redirection, ce qui est une très mauvaise idée en terme de sécurité).

    2) Comme les login et mot de passe arrivent, le bloc d'authentification tentera la connexion et si elle échoue, il affichera le message d'erreur.

    3) En cas de succès le bloc d'authentification regarde s'il a eu un paramètre illegalAccessPage et si oui, redirige vers cette URL. Il suffit donc d'ajouter dans le formulaire présent sur toutes les pages l'URL de la page courante en champ caché pour obtenir la bonne redirection finale une fois l'authentification réussie.
  • 73874.13 en réponse à 73874.12 écrit par Gaël Port

    11/02/2013 12:23


    mamous
    Rang : Expert
    Bonjour Gaël,

    D'après le besoin spécifique que j'ai eu, j'avais pas besoin de créer un autre bloc pour l'authentification, deja j'utilise le même bloc pour l'instant users_authentication c'est juste en jouant après sur les styles que je modifie le rendu donc j'ai pas du modifier le principe de soumission du formulaire et déjà le comportement était idéale mais bon, le problème m'a apparut lorsque j'ai pensé en cas d'erreur de rediriger l'utilisateur vers la page d'authentification dédié ce qui devrait être, comme a dit Jean-Michel , un comportement par défaut.

    Maintenant j'arrive à résoudre grande partie du problème, la redirection est faite dans le cas d'erreur, et si c'est bon, je suis tjr la page sur laquelle j'ai saisi le bon login& mot de passe.

    Le problème est que le message d'erreur n'apparait plus en dirait qu'il ne voyait plus
    $request->setAttribute('errors', array($message));

    ce qui me parait logique vue que je suis entrain d'effectuer une redirection.
    Donc une question explicite serait mieux dans ce cas, pourrais-je faire de manière à ce que lors de la redirection j'envoie aussi l'ancien login et mot de passe et bien sur dois je agir sur la même action?

    Cordialement.

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 73874.14 en réponse à 73874.13 écrit par mamous

    11/02/2013 14:06


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Ben justement, comme je le disais, avec un redirect vous perdez forcément le mot de passe à moins de le passer en clair dans l'URL, ce qui est une très mauvaise idée.

    D'où l'intérêt de soumettre vers l'autre page dès le début et de revenir une fois logué.
  • 73874.15 en réponse à 73874.14 écrit par Gaël Port

    11/02/2013 14:22


    mamous
    Rang : Expert
    Ok, est ce qu'on pourrais faire de manière à garder juste le login??
    Et sinon là dans mon cas même le message d'erreur n'apparait plus :/

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 73874.16

    11/02/2013 15:09


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Oui, le login c'est possible. La méthode LinkHelper::getTagUrlForContext()accepte un tableau de paramètres en 4e argument, paramètres qui sont alors ajoutés l'URL.
  • 73874.17 en réponse à 73874.16 écrit par Gaël Port

    11/02/2013 15:23


    mamous
    Rang : Expert
    Re,

    Merci pour votre réponse mais j'ai pas saisi ce que vous voulez dire. Pouvez vous être plus explicite?

    Déjà pour la redirection j'utilise LinkHelper::getTagUrlForContext($tag); pour l'instant, donc je dois ajouter le login dans l'appel? et après comment je dois le récupérer dans la zone de texte équivalente??

    Cordialement,

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 73874.18

    11/02/2013 15:56


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    LinkHelper::getTagUrlForContext() génère un lien vers le tag. Mais cette méthode a 3 arguments optionnels supplémentaires pour spécifier :
    - le site (si null on prend le site courant)
    - la langue (idem, si null on prend la langue courante)
    - un tableau associatif de paramètres

    Dans votre cas un appel du style :
    LinkHelper::getTagUrlForContext($tag, null, null, array('usersParam[login]' => $login);
    Devrait directement fournir le login au bloc de login (si vous arrivez bien sur une page contenant le bloc users_BlockAuthenticationAction).
  • 73874.19 en réponse à 73874.18 écrit par Gaël Port

    11/02/2013 16:48


    mamous
    Rang : Expert
    Mercii infinément Gaël,

    Voilà j'ai eu mon login et tout fonctionne nickel voici mon bout de code
    else
    {
    $message = LocaleService::getInstance()->transFO('m.users.frontoffice.authentication.badauthentication', array('ucf'));
    $this->addError($message);
    //redirection to page My account in case of authentication error
    $tag = 'contextual_website_website_modules_customer_my-account';
    $this->redirectToUrl(LinkHelper::getTagUrlForContext($tag, null, null, array('usersParam[login]' => $login,'errors' =>$message)));
    $request->setAttribute('login',array($login));
    $request->setAttribute('errors', array($message));
    }


    C'est en procédant comme sa que j'ai eu le login mais le problème c'est que j'ai perdu le message d'erreur, je crois que c'est bien logique vue qu'ici on fait un
    $this->addError($message);
    alors que après je suis rediriger de la page à une autre.
    J'ai essayé d'ajouter l'erreur dans la page retournée par la tag et même la transmettre par l'URL mais en vain...

    Cordialement,

    Développeur & Intégrateur Web

    RBS Change
    V 3.5.2
    Ecommerce Core
  • 73874.20

    11/02/2013 16:54


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Encore une fois, c'est pour ça que je recommandais de soumettre vers cette page qui redirige ensuite...


    M'enfin là vous pouvez transmettre le message d'erreur en paramètre (comme le login) et modifier le template pour l'afficher.

    Édité par Gaël Port 11/02/2013 16:55

 
Merci de prendre connaissance et de respecter les règles des forums.
 
1471 membres
Aucun membre connecté