2014-05-01 33 views
0

我希望能夠在現有客戶自動登錄到Magento的,然後將其重定向到現場的Magento網站,登錄,這是在同一臺服務器上的兩個子域之間。登錄將發生在app.mydomain.com(它本身只是一個PHP應用程序;不是Magento站點),然後Magento安裝位於shop.mydomain.com。用戶登錄到Magento的編程

我已經試過這幾打排列,沒有運氣。這裏是我當前的代碼:

// Include Magento app 
require_once(config::$magento_root . '/app/Mage.php'); 
Varien_Profiler::enable(); 
Mage::setIsDeveloperMode(true); 
ini_set('display_errors', 1); 
umask(0); 
Mage::app('default'); 

// Initialize Magento session 
Mage::getSingleton('core/session', array('name' => 'frontend')); 

// Get instance of customer model for the actual website 
$customer = Mage::getModel('customer/customer')->setWebsiteId(Mage::app()->getStore()->getWebsiteId()); 

// Load the client with the appropriate email 
$customer->loadByEmail($email_address); 

// Get a customer session 
$session = Mage::getSingleton('customer/session'); 

// Login and check the customer by his uid 
$session->loginById($customer->getId()); 

// Redirect to shop home page 
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getBaseUrl())->sendResponse(); 

這確實設法登錄($session->loginById()回報1)的用戶,但在重定向,客戶再次註銷。我在嘗試使用session_destroy()之前已經試過了;我試過改變Magento的cookie域到.mydomain.com,但沒有任何工作。這甚至有可能嗎?

+0

我不認爲它會這樣工作。你可能需要創建一些散列,通過GET參數傳遞給其他服務器,然後將它們記錄在那裏。 –

+0

商店是否在同一個Magento實例上運行?還是有兩個不同的實例在同一臺服務器上運行? –

+0

哦,我應該提到...我的應用程序(在app.mydomain.com)不是Magento商店。這是一個自定義的PHP應用程序(問題更新)。我試圖從那裏登錄到Magento,正如我所說的那樣,直到我真正重定向到Magento網站。 –

回答

0

我不認爲這是可能的兩個子域之間做到這一點,即使他們是在同一臺服務器上。所以經過一番思考,並基於史蒂夫羅賓斯的評論,我想出了另一個(哈克)解決方案。

從我的(非Magento的)應用程序,我擡頭一看,我想登錄Magento的用戶ID作爲和加密了。然後,我在我的Magento安裝的根目錄中創建了一個PHP文件,它將解密該用戶ID,登錄到Magento,並將用戶重定向到Magento的首頁。畢竟這只是一個簡單的問題,就是通過帶有查詢字符串參數的重定向將該加密的用戶標識從應用程序傳遞到PHP文件。

我認爲這可能會更好地使用自定義Magento模塊來處理路由,而不是坐在服務器上的PHP文件......但我不知道如何編寫一個Magento模塊,我們時間緊迫。

0

首先你如何識別這個客戶是你的現有客戶,所以我不認爲你℃的發現。如果你有什麼辦法找到,這是現有客戶,那麼你可以自動登陸客戶和重定向究竟在哪兒你要。

+0

我知道客戶的存在,因爲我的應用程序在嘗試登錄Magento之前立即創建客戶。我可以創建它們,記錄他們看起來像它的作品,直到他們到達Magento網站本身。 –

3

我遇到同樣的問題,並找到了解決辦法。

$custSessionId=''; 

if ($session->isLoggedIn()) { 
    //The following gives you the session id for that customer. 
    $custSessionId = Mage::getModel("core/session")->getEncryptedSessionId(); 
} 

// Redirect to shop home page 
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getBaseUrl() . '?SID=' . $custSessionId)->sendResponse();