Авторизация по nickname в Instant2

Добавление возможности авторизации по паре nickname/password

#1 2 мая 2015 в 13:18
Возможно, некоторым пользователям не очень удобно авторизовываться по имейл/пароль. На нашем сайте некоторые юзеры вообще не помнят, с какого мыла они регистрировались и спрашивают об этом у администратора сайта. shock

Поэтому сделал небольшой хак, добавляющий возможность авторизации по нику.
Делать особо ничего не надо, просто изменить public static function login в файле \system\core\user.php

Убираем проверку мыла на мыльность и меняем местами слово email на nickname:

  1. public static function login($nickname, $password, $remember=false) {
  2.  
  3.  
  4.  
  5. $model = cmsCore::getModel('users');
  6.  
  7. $model->filterEqual('nickname', $nickname);
  8. $model->filterFunc('password', "MD5(CONCAT(MD5('{$password}'), i.password_salt))");
  9.  
  10. $user = $model->getUser();
  11.  
  12. if(!$user) {
  13. $model->filterEqual(('email'), $nickname);
  14. $model->filterFunc('password', "MD5(CONCAT(MD5('{$password}'), i.password_salt))");
  15.  
  16. $user = $model->getUser();
  17. }
  18.  
  19. if(!$user) {
  20. $user = cmsEventsManager::hook('user_auth_error', array('email'=>$email,'password'=>$password));
  21. }
  22.  
  23. if (empty($user['id'])) { return false; }
  24.  
  25. $user = cmsEventsManager::hook('user_login', $user);
  26.  
  27. self::sessionSet('user', array(
  28. 'id' => $user['id'],
  29. 'groups' => $user['groups'],
  30. 'time_zone' => $user['time_zone'],
  31. 'perms' => self::getPermissions($user['groups'], $user['id']),
  32. 'is_admin' => $user['is_admin'],
  33. ));
  34.  
  35. if ($remember){
  36.  
  37. $auth_token = string_random(32, $email);
  38. self::setCookie('auth', $auth_token, 8640000); //100 дней
  39.  
  40. $model->update('cms_users', $user['id'], array('auth_token'=>$auth_token));
  41.  
  42. }
  43.  
  44. $model->update('cms_users', $user['id'], array(
  45. 'ip' => self::getIp()
  46. ));
  47.  
  48. return $user['id'];
  49.  
  50. }
При неудаче авторизации по нику, функция предпринимает попытку авторизации по мылу. Поэтому авторизация по email тоже остается возможной.

Если это как-то нарушает безопасность или еще что — знатокам просьба сообщить.
#2 2 мая 2015 в 13:34
выходит, что регистрация с существующим ником возможна? и авторизоваться можно двойной авторизацией, через ошибку?
#3 2 мая 2015 в 13:42
PIN,
Если не проходит авторизация по нику — if(!$user) — предпринимается попытка авторизации по мылу.
Я проверял на чистом, свежеустановленном сайте. Все работает. Авторизует как по нику, так и по мылу.
#4 2 мая 2015 в 13:45
HiAndy, вопрос был про регистрацию
#5 2 мая 2015 в 13:55
PIN,
Регистрация с существующим ником возможна изначально. И я тут совершенно не при чем. laugh

По поводу двойной авторизации не понял. Задайте вопрос более развернуто.
#6 2 мая 2015 в 13:57
HiAndy, так если есть два одинаковых ника, куда авторизует?
#7 2 мая 2015 в 14:02
Raiden,
Туда, с кем совпадет пароль. Уже проверил. laugh

Собственно, сама неуникальность ников — не очень правильное явление. На нашем сайте наш разработчик запретил этот волюнтаризьм.
#8 4 мая 2015 в 05:35
Хак надо дополнить, чтоб при регистрации шла проверка на уникальность ника.
#9 4 мая 2015 в 10:20
dv,
Это не хак надо дополнить, это Instantcms2 надо дополнить. zst

Или Вы боитесь, что на сайте зарегистрируются двое-трое пользователей "Vasya" у которых пароль одинаковый и тоже "Vasya" ?
Я думаю, что если такой придурок случайно зайдет в чужой профиль такого же придурка — он не заметит разницы… laugh
#10 4 мая 2015 в 11:30
HiAndy, да все нормально, для кулибиных хорошая заметка. Но дело в том, что без проверки никнэймов на уникальность будет бардачок. Делается это не сложно, т.ч. справятся те кому этого надо. Главное не забыть сделать это. А у вас

На нашем сайте наш разработчик запретил этот волюнтаризьм.

HiAndy
, как я понял, это реализовано. Вот и хорошо.
#11 4 мая 2015 в 11:50
К стати хороший хак! так как многие регистрируясь у меня задают вопрос почему не могу войти… Так как многие пытаются вбить именно логин, а не е-маил! НО уникальность логина это тоже ХОРОШО и нужна! Спасибо! :)
#12 4 мая 2015 в 11:51

как я понял, это реализовано.

PIN
Это реализовано на сайте 2011 года изготовления. И он крутится до сих пор на 1.9
Наш разработчик — человек занятой и рефакторингом ему заниматься некогда, поэтому я сам, факультативным образом, пытаюсь что-то обновить.
На тестовом сайте на 1.10.6 даже практически все работает.
Теперь вот на локальном пытаюсь перенести сайт на вторую версию.
#13 4 мая 2015 в 11:52

Или Вы боитесь, что на сайте зарегистрируются двое-трое пользователей "Vasya" у которых пароль одинаковый и тоже "Vasya" ?

HiAndy
Пусть регистрируются "Vasya", "Vasya1", "Vasya2", "Vasya3", и т.д! По крайней мере знаешь сколько у тебя ИХ! rofl
#14 4 мая 2015 в 14:27
MegaRostov,
Смех смехом, но был случай, когда у девушки был ник что-то вроде "Киса" и пароль такой же.
Соответственно её быстро ломанули и написали от её имени весьма фривольных постов (впрочем, совершенно приличных и беззлобных).
Она мне выкатила претензию в использовании служебного положения в эротических целях.
Я долго объяснял про основы безопасности в интернетах, но все равно остался сволочью и извращенцем… facepalm
#15 4 мая 2015 в 17:22


dv,
Это не хак надо дополнить, это Instantcms2 надо дополнить. zst

HiAndy

Зачем?
На данный момент никнейм может выполнять роль реального имени. Например Вася. Или Вася Пупкин. Таких может быть несколько.
А вот авторизация по нику — это 90-е годы.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.