0

問題は次のとおりです。スクリプトを使用して Magento でユーザーを作成し、このユーザーが既に存在する場合はログインしようとしています。

try {
        // If new, save customer information
$customer -> firstname = $firstname;
    $customer -> lastname = $lastname;
    $customer -> email = $email;
    $customer -> password_hash = md5($password);
    if ($customer -> save()) {
        echo $customer -> firstname . " " . $customer -> lastname . " information is saved!";
        $customer->setConfirmation(null);
        $customer->save();
    } else {
        echo "An error occured while saving customer";
    }
} catch(Exception $e) {
    // If customer already exists, initiate login
    if (preg_match('/This customer email already exists/', $e)) {
        $customer -> loadByEmail($email);
        $session = Mage::getSingleton('customer/session');
        $session -> login($email, $password);
        echo $session -> isLoggedIn() ? $session -> getCustomer() -> getName() . ' is online!' : 'not logged in';
    }
}

スクリプトは「ユーザーはオンラインです!」と表示しますが、メイン ページに移動すると、ログインしていないかのようにログイン ボタンが表示されます。ユーザーをログインするにはどうすればよいですか?

4

1 に答える 1

0

Web サイトの ID を設定しましたか?

loadByEmail で顧客が存在するかどうかを確認することもできます

$customer = Mage::getModel('customer/customer');

$customer->setWebsiteId(Mage::app()->getWebsite()->getId());

$customer->loadByEmail($email);

// This customer email exists
if($customer->getId()){
    Mage::getSingleton('core/session', array('name' => 'frontend'));
    Mage::getSingleton('customer/session')->setCustomerAsLoggedIn($customer);
}
else{
    .....
    $customer->save();
}

また

$customer = Mage::getModel('customer/customer');
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->loadByEmail($email);

if(!$customer->getId()){
    $customer->setFirstname($firstname);
    $customer->setLastname($lastname);
    .....
    $customer->save();
}

Mage::getSingleton('core/session', array('name' => 'frontend'));
Mage::getSingleton('customer/session')->setCustomerAsLoggedIn($customer);

見る

于 2013-07-09T17:14:57.010 に答える