• Главная
  • Карта сайта
Не найдено

2 способи як зробити авторизацію по email в Joomla

Привіт, шановні читачі shargaev-group.ru! Нещодавно зіткнувся з завданням, реалізувати авторизацію по email адресою на сайті Joomla. За замовчуванням, в Joomla доступна авторизація тільки за логіном, що на мій погляд, не зовсім зручно. Трохи розкинувши мізками, в мою голову прийшло два рішення, якими я хочу поділитися з вами.

Спосіб №1 Підміна поля.

Спосіб полягає в наступному: міняємо назву поля Логін (username) на Email. При реєстрації, пропонуємо користувачу заповнити два поля «Email» і «Повторне введення email адреси». Отримані значення з першого поля, joomla буде зберігати в поле username (Логін). Таким чином, користувач зареєструвався на вашому сайті, зможе авторизуватися по email адресою.

Приступаємо до реалізації:

Відкриваємо мовної файл компонента / language / ru-RU / users ru-RU.com_users.ini і правимо наступні рядки:

Для регістрації:

COM_USERS_REGISTER_USERNAME_DESC = «Введіть адресу електронної пошти»

COM_USERS_REGISTER_USERNAME_LABEL = "Адреса електронної пошти"

COM_USERS_REGISTER_EMAIL1_DESC = «Введіть адресу електронної пошти ще раз»

COM_USERS_REGISTER_EMAIL1_LABEL = "Адреса електронної пошти ще раз»

У формі реєстрації в місце поля Логін, має з'явитися поле «Адреса електронної пошти».

Для авторизації:

У файлі /language/ru-RU/ru-RU.mod_login.ini правимо рядки:

MOD_LOGIN_VALUE_USERNAME = "Логін або Email»

валідація:

Для перейменованого поля username нам потрібно зробити валідацію. Відкриваємо файл /components/com_users/models/forms/registration.xml

Шукаємо код:

<Field name = "username" type = "text" class = "validate-username" description = "COM_USERS_DESIRED_USERNAME" filter = "username" label = "COM_USERS_REGISTER_USERNAME_LABEL" message = "COM_USERS_REGISTER_USERNAME_MESSAGE" required = "true" size = "30" validate = "username" maxlength = "10" />

І замінюємо значення validate на email, а значення filter на string:

<Field name = "username" type = "text" class = "validate-username" description = "COM_USERS_DESIRED_USERNAME" filter = "string" label = "COM_USERS_REGISTER_USERNAME_LABEL" message = "COM_USERS_REGISTER_USERNAME_MESSAGE" required = "true" size = "30" validate = "email" maxlength = "10" />

Спосіб №2. Кастомізація компонента com_users.

Принцип роботи даного методу: в поле «Логін» користувач може ввести логін або пароль. При відправці форми на сервер, перевіряємо в контролері, що знаходиться в надісланому поле username. Якщо воно містить email, шукаємо користувача з такою адресою в базі даних і повертаємо його логін. Отриманий логін перезаписати в значення $ data [ 'username']. Далі йде стандартна процедура авторизація Joomla.

Приступаємо до реалізації:

У модулі авторизації, міняємо назву поля «Логін» на «Логін або Email». Для цього в мовному файлі файлі /language/ru-RU/ru-RU.mod_login.ini міняємо значення MOD_LOGIN_VALUE_USERNAME на «Логін або Email».

У мовному файлі /language/ru-RU/ru-RU.com_users.ini міняємо значення рядка на

COM_USERS_LOGIN_USERNAME_LABEL = "Логін або Email»

У контролер /components/com_users/controllers/user.php після коду (приблизно 39 рядок):

$ Data [ 'return'] = base64_decode (JRequest :: getVar ( 'return', '', 'POST', 'BASE64')); $ Data [ 'username'] = JRequest :: getVar ( 'username', '', 'method', 'username'); $ Data [ 'password'] = JRequest :: getString ( 'password', '', 'post', JREQUEST_ALLOWRAW);

Вставляємо код:

// отримуємо логін if (preg_match ( '/ ([a-z0-9 _ \ - \.]) + @ ([A-z0-9 _ \ - \.]) + \. ([Az \.] {2, 6}) / ', $ data [' username ']) && $ data [' password ']) {$ model = $ this-> getModel (' login '); if ($ login = $ model-> getUserLogin ($ data [ 'username'])) $ data [ 'username'] = $ login; }

Даний код, перевіряє вміст поля username, якщо воно містить email, запускає метод getUserLogin для пошуку логіна.

У файл моделі /components/com_users/models/login.php додаємо метод getUserLogin:

public function getUserLogin ($ mail) {if (! $ mail) return false; $ Db = $ this-> getDBO (); $ Q = $ db-> getQuery (true); $ Q-> select ( 'username') -> from ( '#__ users') -> where ( 'email ='. $ Db-> quote ((string) $ mail)); $ Db-> setQuery ($ q); if ($ res = $ db-> loadResult ()) return $ res; return false; }

функція шукає в базі даних користувача за вказаною email адресою, якщо такий користувач є, повертає його логін.

Ну ось і все, авторизація по email в Joomla готова!

Якщо у вас виникли питання, задавайте їх у коментарях.

Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью