
Ce script est maintenant totalement fonctionnel!
Pour ceux qui souhaitent, dans magento, pouvoir se connecter à la place d’un de leur client depuis l’admin , le code qui suit pourra fortement vous interesser. En effet il va vous permettre depuis l’administration de magento de vous connecter à la place de votre client afin de l’aider à résoudre un problème auquel il est confronté dans sa session, l’admin pourra ainsi l’aider plus efficacement.
public function connectAsAction() {
if (!Mage::getSingleton('admin/session') ->isAllowed('customer/connectas')) {
echo 'You are not allowed to connect as another user'; return;
}
$customerId = $this->getRequest()->getParam('id');
$customer = Mage::getModel('customer/customer') ->load($customerId);
if ($customer->getId() != $customerId) { echo 'User not found.'; return; }
$preferedStoreViewId = $customer->getPreferedStoreViewId();
if (!$preferedStoreViewId > 0) {
$customer->getWebsiteId();
$preferedStoreViewId = Mage::app() ->getWebsite($customer->getWebsiteId())
->getDefaultStore() ->getStoreId();
} session_write_close();
//Suppression du cookie 'frontend'
$params = session_get_cookie_params();
setcookie(
'frontend',
'',
time() - 42000,
$params["path"],
$params["domain"],
$params["secure"],
$params["httponly"]
);
//Here we need to write on the session
//corresponding to the frontend website
session_regenerate_id();
session_name('frontend');
session_start();
$customer->setPreferedStoreViewId($preferedStoreViewId);
//We set the customer and its store view
Mage::app()->setCurrentStore( Mage::getModel('core/store')
->load($preferedStoreViewId) );
Mage::getSingleton('customer/session')
->setCustomerAsLoggedIn($customer);
//We need to write data before continuing
//in the normal magento process session_write_close();
//Redirect to the front on the specific store view
$this->_redirectUrl(Mage::app()
->getStore($preferedStoreViewId)
->getBaseUrl());
}
Merci à Nicolas Bastien, chef de projet PHP à Lyon pour ce code.
Pour finir, si vous aussi vous rencontrez des problèmes de lenteurs sur votre boutique je vous conseil de jeter un oeil à cet article sur l’optimisation de Magento
Commentaires sur: "Magento connect as: se connecter en tant que client depuis l’admin" (6)
Le code est très intéressant mais peut être optimisé.
On préférera les $session->addError(‘erreur’) aux echo, les $this->redirect(‘url’) à la place des return, puis la gestion des cookies peut se faire via des méthodes de Magento.
Bonne continuation
Merci Capit pour tes remarques, j’optimiserai cela dès que possible
[...] Magento connect as: se connecter en tant que client depuis l’admin [...]
A noter aussi que ce code ne fonctionne pas si nous sommes sur des URL sécurisées SSL.
Je suis en train de me pencher dessus. Je te fais signe si je trouve
avec plaisir, j’attends de tes nouvelles si tu as trouvé
Il suffit de retirer l’appel à la fonction session_regenerate_id.
A priori ça n’engendre pas de faille de sécurité.