I am working on a custom Prestashop module that enables user login via a token passed in the URL. Despite successfully retrieving the token, validating it, and updating the customer's session with Context::cookie, the login process is not reflecting in the Prestashop fronted.
<?php if (!defined('_PS_VERSION_')) { exit; } class tokenlogintokenloginModuleFrontController extends ModuleFrontController { public function initContent() { parent::initContent(); // Get the token from the URL $token = Tools::getValue('token'); if (!$token) { error_log('Token not provided!'); return; // Handle error appropriately } // Validate the token $customerId = $this->validateToken($token); if (!$customerId) { error_log('Invalid or expired token: ' . $token); return; // Handle error appropriately } // Log in the user $this->loginCustomer($customerId); // echo "<pre>";print_r($this->context->cookie); ;exit; // Check if the user is logged in if ($this->context->cookie->logged) { // Set customer data $customerName = $this->context->cookie->customer_firstname . ' ' . $this->context->cookie->customer_lastname; // Assign these variables to the context $this->context->smarty->assign([ 'logged' => true, 'customerName' => $customerName, 'urls' => [ 'actions' => [ 'logout' => $this->context->link->getPageLink('my-account', null, null, ['logout' => true]), ], 'pages' => [ 'my_account' => $this->context->link->getPageLink('my-account'), 'authentication' => $this->context->link->getPageLink('authentication'), ], 'current_url' => Tools::getHttpHost(true) . $_SERVER['REQUEST_URI'], ], ]); } else { // If not logged in, assign logged status as false $this->context->smarty->assign('logged', false); } Tools::redirect($this->context->link->getPageLink('my-account', true)); } private function validateToken($token) { // Fetch the customer ID by matching the secure key $sql = 'SELECT `id_customer` FROM `' . _DB_PREFIX_ . 'customer` WHERE `secure_key` = "' . pSQL($token) . '"'; return Db::getInstance()->getValue($sql) ?: false; } // http://localhost/prestashop/module/tokenlogin/tokenlogin?token=7cb1cf6919827474a03871aff6ea975b private function loginCustomer($customerId) { global $context; $customer = new Customer($customerId); if (Validate::isLoadedObject($customer)) { // Set customer data $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->passwd = $customer->passwd; $this->context->cookie->logged = 1; $this->context->cookie->email = $customer->email; $this->context->cookie->is_guest = 0; // Not a guest $this->context->cart->secure_key = $customer->secure_key; // Persist the cookie $this->context->cookie->write(); // Fire hooks for customer authentication Hook::exec('actionAuthentication', ['customer' => $this->context->customer]); // Check and handle cart rules CartRule::autoRemoveFromCart($this->context); CartRule::autoAddToCart($this->context); error_log('Customer logged in with ID: ' . $customerId); } else { error_log('Invalid customer ID: ' . $customerId); } } private function updateCart($customer) { // Ensure the cart is updated for the logged-in customer if (!$this->context->cart->id || $this->context->cart->id_customer != $customer->id) { $this->context->cart->id_customer = (int)$customer->id; $this->context->cart->id_address_delivery = $this->context->cart->id_address_delivery ?: 0; $this->context->cart->id_address_invoice = $this->context->cart->id_address_invoice ?: 0; $this->context->cart->id_lang = $this->context->language->id; $this->context->cart->id_currency = $this->context->currency->id; $this->context->cart->secure_key = $customer->secure_key; $this->context->cart->save(); $this->context->cookie->id_cart = (int)$this->context->cart->id; } } }
the context shows customer as logged in
but in the home page header user information not showing
Please help me here