Samantha66 Posted March 4, 2021 Share Posted March 4, 2021 Bonjour à tous, J'ai créé un module de devis qui génère un email avec un lien vers une page détails du devis dans le compte client. Ce lien contient l'identifiant du devis qui me permet de retrouver le client et ainsi de le connecter automatiquement à son compte quand il clique dessus. J'utilise le code suivant : $client_devis = new Customer($id_customer) ; $cookie->id_customer = intval($client_devis->id); $cookie->customer_lastname = $client_devis->lastname; $cookie->customer_firstname = $client_devis->firstname; $cookie->passwd = $client_devis->passwd; $cookie->logged = 1; $cookie->email = $client_devis->email; $this->context->cookie->id_customer = (int)($client_devis->id); $this->context->cookie->customer_lastname = $client_devis->lastname; $this->context->cookie->customer_firstname = $client_devis->firstname; $this->context->cookie->logged = 1; $client_devis->logged = 1; $this->context->cookie->is_guest = $client_devis->isGuest(); $this->context->cookie->passwd = $client_devis->passwd; $this->context->cookie->email = $client_devis->email; $this->context->customer = $client_devis; $this->context->cart->secure_key = $client_devis->secure_key; Tools::redirect($link->getModuleLink('moduledevis','devis')); La connexion automatique fonctionne correctement sous Prestashop 1.6 avec ce code, mais pas sous Prestashop 1.7.6.7. Quelqu'un aurait-il une idée du problème ? Merci d'avance. Link to comment Share on other sites More sharing options...
Eolia Posted March 4, 2021 Share Posted March 4, 2021 Attention à la faille de sécurité^^ (n'importe qui qui récupère le lien est logué à la place du client et a accès à toutes ses données) $link est défini dans votre code ? Link to comment Share on other sites More sharing options...
Samantha66 Posted March 4, 2021 Author Share Posted March 4, 2021 Merci pour votre retour ! Oui, en effet, il y a une "petite" faille de sécurité, mais c'est le souhait du propriétaire du site et je ne trouve pas d'autres solutions plus sécurisées... $link est défini en début de code par : $link = new Link(); Link to comment Share on other sites More sharing options...
Eolia Posted March 4, 2021 Share Posted March 4, 2021 Non pas petite^^ Fuitage de données c'est grave, surtout en se basant juste sur un id_customer... Vérifier que le client est déjà logué sinon redirect vers login avec paramètre back vers votre module. Que se passe-t-il lorsque vous cliquez sur votre lien actuellement ? Redirection ? Page d'accueil ? Erreur ? Que disent les logs serveur ? Link to comment Share on other sites More sharing options...
Samantha66 Posted March 5, 2021 Author Share Posted March 5, 2021 Bonjour, Lors de la création du devis, si le client n'existe pas dans la base de données, le module crée automatiquement le compte client avec un mot de passe aléatoire, d'où la connexion automatique. Je vais intégrer une nouvelle page de vérification, en posant une question au client sur un des paramètres de son compte (par exemple son numéro de tel.), ça sera plus sécurisé déjà. Sinon, je n'ai pas d'erreur lorsqu'on clique sur le lien, la session ne se crée pas et ça redirige vers la page d'accueil puisque la page du module demande à ce qu'un client soit loggé. Si ensuite on essaie d'accéder au compte, ça demande identifiant et mot de passe. Link to comment Share on other sites More sharing options...
Eolia Posted March 5, 2021 Share Posted March 5, 2021 je ne sais pas trop pourquoi vous passez par $client_devis qui n'est pas utilie ici. Ceci devrait fonctionner $customer = new Customer((int)$id_customer); if (Validate::isLoadedObject($customer)) { $customer->logged = 1; $this->context->customer = $customer; $this->context->cookie->id_customer = (int)$customer->id; $this->context->cookie->customer_lastname = $customer->lastname; $this->context->cookie->customer_firstname = $customer->firstname; $this->context->cookie->logged = 1; $this->context->cookie->is_guest = $customer->isGuest(); $this->context->cookie->passwd = $customer->passwd; $this->context->cookie->email = $customer->email; Tools::redirect($link->getModuleLink('moduledevis', 'devis')); } Link to comment Share on other sites More sharing options...
Samantha66 Posted March 5, 2021 Author Share Posted March 5, 2021 (edited) En fait, pour que la connexion automatique fonctionne il faut enregistrer une nouvelle session customer. J'ai utilisé le code que vous m'avez envoyé et y ai ajouté la création de la session, c'est beaucoup plus propre que mon code de départ... Voici le code final qui fonctionne : $customer = new Customer((int) $id_customer); if (Validate::isLoadedObject($customer)) { $customer->logged = 1; $this->context->customer = $customer; $this->context->cookie->id_customer = (int) $customer->id; $this->context->cookie->customer_lastname = $customer->lastname; $this->context->cookie->customer_firstname = $customer->firstname; $this->context->cookie->logged = 1; $this->context->cookie->check_cgv = 1; $this->context->cookie->is_guest = $customer->isGuest(); $this->context->cookie->passwd = $customer->passwd; $this->context->cookie->email = $customer->email; $this->context->cookie->registerSession(new CustomerSession()); Tools::redirect($link->getModuleLink('moduledevis','devis')); } Merci pour votre aide Ce que je ne comprends pas, c'est que tous les modules (gratuits) de connexion automatique des clients via le back-office utilise le code que vous m'avez envoyé sans créer de session et pour eux ça fonctionne... Edited March 5, 2021 by Samantha66 (see edit history) 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now