RSS Мои друзья Контакты

Ajax авторизация и регистрация в Magento

В одной из предыдущих статтей был создан JavaScript класс формы, которая умеет отправлять данные AJAX-ом. Самое время задействовать его на практике.

Как всегда

Все начинается из создания нового модуля. Стандартный модуль, в котором добавляем новый путь в роутинге (ajax) и добавляем layout-update, который подключает на страницу css и js отвечающие за работу всплывающего окна логин формы.

Контроллер и Защита

Создадим контроллер, который наследуется от Mage_Customer_AccountController. Работа с AJAX в Magento достаточна проста, благодаря гибкому механизму и универсальному классу Varien_Object. Пример реализации ответа может выглядеть следующим образом

class Freaks_Ajax_Customer_AccountController extends Mage_Customer_AccountController
{
    public function loginCustomerAction()
    {
        $response = $this->getResponse();
        $request  = $this->getRequest();
        $result   = new Varien_Object();

        if ($this->_getSession()->isLoggedIn() || !$request->isPost()) {
            $result->redirect = Mage::getUrl('*/*/');
            return $response->setBody($result->toJSON());
        }

        $login = $request->getPost('login');
        if (empty($login['username']) || empty($login['password'])) {
            $result->error = $this->__('Login and password are required.');
            return $response->setBody($result->toJSON());
        }

        // do login and there are a few lines of code
        
        return $response->setBody($result->toJSON());
    }
}

Еще очень важным моментом является то, что имена методов регистрации и авторизации должны начинаться с create и login соответственно. Если открыть и посмотреть исходный код класса Mage_Customer_AccountController, увидим что у него метод preDispatch проверяет имя метода и если оно не соответствует одному из списка разрешенных (доступных без авторизации), то мы получим ошибку в ответе.

Далее в моем тяжелом деле помог копипаст, потому что изначально разработчики Magento не продумали возможность авторизации с помощью AJAX, пришлось скопировать обычные методы логина и регистрации и немного их подправить.

Хотя данные и отправляются асинхронным методом, это не значит, что какой-то спам-бот не будет забивать нам базу новыми пользователями. Поэтому я реализовал защиту з помощью скрытого поля или honey protection (или здесь).

Клиентская часть

Исходники приводить не буду так как там ничего интересного. Просто создается 2 объекта класса FreaksForm, а также логика отвечающая за появление и скрытие логин попапа. Вот что получилось

magento ajax login and register

Исходники модуля можно скачать здесь

Добавить комментарий

Комментариев: 4

  • dr3dd
    Ответить 24 февраля 2012 г., 15:30
    Сделал все как по примеру, вопрос по какой ссылке перейти что б отобразилась новая форма логина, кликая по стандартной, которая в верхнем меню, загружается стандартная форма логина.
    • Сергей (Администратор)
      Ответить 24 февраля 2012 г., 22:02
      нужно просто нажать на ссылку "Log In", JavaScript-ом откроется попап
      • dr3dd
        Ответить 27 февраля 2012 г., 9:52
        Спасибо, разобрался, просто не был подключен слой формы )))
  • Dzurillo
    Ответить 20 апреля 2013 г., 12:35
    Это просто праздник какой-то :)
    Столько всего полезного в одном месте, да еще с примерами!
    Спасибо! Не знаю как и благодарить :)