Авторизация не по мылу+пароль, а по номеру телефона+пароль. Возможно? ICMS 2

#1 22 апреля 2016 в 10:41
Возможно ли реализовать и мнеого ли файлов править надо, чтобы авторизация шла по телефону+пароль, а не по мылу+пароль?
всех пользователей сам заношу руками в базу.
#3 22 апреля 2016 в 13:12


Да хоть по аське!
instantcms.ru/forum/thread21606.html

Вместо никнейма напишите phone.

HiAndy
Там есть хак для использования ника, имеете ввиду что, вместо ника прописать скажем phone и регистрировать по номеру телефона?
#4 22 апреля 2016 в 14:35
Birles,
Да хоть по любимой музыке.
Авторизацию можно сделать по любому (лучше уникальному) полю из таблицы cms_users
#5 22 апреля 2016 в 15:10


Birles,
Да хоть по любимой музыке.
Авторизацию можно сделать по любому (лучше уникальному) полю из таблицы cms_users

HiAndy

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

  1. public static function login($email, $password, $remember=false) {
  2.  
  3. /* if (!preg_match("/^([a-z0-9\._-]+)@([a-z0-9\._-]+)\.([a-z]{2,6})$/i", $email)){
  4.   return 0;
  5.   } */
  6.  
  7. $model = cmsCore::getModel('users');
  8.  
  9. $model->filterEqual('email', $email);
  10. $model->filterFunc('password', "MD5(CONCAT(MD5('{$password}'), i.password_salt))");
  11.  
  12. $user = $model->getUser();
  13.  
  14. if (!$user){$model = cmsCore::getModel('users');
  15.  
  16. $model->filterEqual('phone', $email);
  17. $model->filterFunc('password', "MD5(CONCAT(MD5('{$password}'), i.password_salt))");
  18.  
  19. $user = $model->getUser();
  20. }
  21. if (!$user){$model = cmsCore::getModel('users');
  22.  
  23. $model->filterEqual('skype', $email);
  24. $model->filterFunc('password', "MD5(CONCAT(MD5('{$password}'), i.password_salt))");
  25.  
  26. $user = $model->getUser();
  27. }
  28. if (!$user){$model = cmsCore::getModel('users');
  29.  
  30. $model->filterEqual('icq', $email);
  31. $model->filterFunc('password', "MD5(CONCAT(MD5('{$password}'), i.password_salt))");
  32.  
  33. $user = $model->getUser();
  34. }
  35. if (!$user){$model = cmsCore::getModel('users');
  36.  
  37. $model->filterEqual('nickname', $email);
  38. $model->filterFunc('password', "MD5(CONCAT(MD5('{$password}'), i.password_salt))");
  39.  
  40. $user = $model->getUser();
  41. }
  42.  
  43.  
  44. if(!$user) {
  45. $user = cmsEventsManager::hook('user_auth_error', array('email'=>$email,'password'=>$password));
  46. }
  47.  
  48. if (empty($user['id'])) { return 0; }
  49.  
  50. $user = cmsEventsManager::hook('user_login', $user);
  51.  
  52. self::sessionSet('user', array(
  53. 'id' => $user['id'],
  54. 'groups' => $user['groups'],
  55. 'time_zone' => $user['time_zone'],
  56. 'perms' => self::getPermissions($user['groups'], $user['id']),
  57. 'is_admin' => $user['is_admin'],
  58. ));
  59.  
  60. $update_data = array(
  61. 'ip' => self::getIp()
  62. );
  63.  
  64. if ($remember){
  65.  
  66. $auth_token = string_random(32, $email);
  67. self::setCookie('auth', $auth_token, 8640000); //100 дней
  68.  
  69. $update_data['auth_token'] = $auth_token;
  70.  
  71. }
  72.  
  73. $model->update('cms_users', $user['id'], $update_data, true);
  74.  
  75. return $user['id'];
  76.  
  77. }
  78.  
Осталось сделать авторизацию по размеру МПХ.
#7 22 апреля 2016 в 17:04

HiAndy

HiAndy
Заменил public static function login в файле \system\core\user.php кодом, который вы предоставили в первом спойлере и ничего не происходит. Как просил майл при регистрации, так и просит. При попытке зарегистрироваться пишет что формат емайл неправильный. Не подскажете, может я что то делаю неправильно. Пробовал вставить из второго спойлера, то же самое, ничего не происходит. Менял в версии 2.5.1
#8 22 апреля 2016 в 18:25
Birles,
Проверил на трех локальных сайтах (2.4, 2.5, 2.5.1) и одном рабочем (2.4).
Все работает безотказно.
Раз пишет что

формат емайл неправильный

Birles
значит работает проверка на правильность емейла.
Вы видите, что в том файле, что я прислал эта функция "закомментирована".
  1. /* if (!preg_match("/^([a-z0-9\._-]+)@([a-z0-9\._-]+)\.([a-z]{2,6})$/i", $email)){
  2.   return 0;
  3.   } */
Вот эти /* и */ означают, что все, что между этими значками работать не будет.
Почитайте про пыхапе хоть чуть-чуть. Например здесь: www.php.su/

Да! И кэш очистите.
#9 22 апреля 2016 в 18:43
Спасибо

HiAndy

HiAndy
, но к сожалению я простой пользователь и ничего не понимаю в пхп. Мои знания ограничиваются тем, что могу заменить что то, на что то готовое или чуть чуть подредактировать css, можно сказать совсем чайник.
#10 22 апреля 2016 в 19:44

к сожалению я простой пользователь

Birles
Увы, администратор сайта не может себе позволить быть "просто пользователем".
Все же рекомендую почитать, чтобы иметь минимальное представление что вообще происходит на сайте.
#11 3 августа 2017 в 22:23


А вот авторизация по никнейму, телефону, аське и скайпу laugh
Осталось сделать авторизацию по размеру МПХ.

Ris

Я вот в этот хук засунул авторизацию по номеру телефона
  1. cmsEventsManager::hook('user_auth_error', array('email'=>$email,'password'=>$password));
Но почему-то другой контроллер не перехватывает это событие.
Проверяю с помощью
  1. print_r(cmsEventsManager::getEventListeners('user_auth_error'));
получаю пустой массив.
#12 4 августа 2017 в 00:38

получаю пустой массив.

islyaeFF
в базу данных записали привязку своего компонента к этому хуку?
#13 4 августа 2017 в 01:12


в базу данных записали привязку своего компонента к этому хуку?

@SmartControl

Спасибо вам огромаднейшее)) Теперь всё работает!!!

А всю функцию login, которая находится в /system/core/user.php, можно как-то переопределить в файле custom.php?
Тогда бы можно было не переживать и по поводу закомментированных строк проверки мыла на мыльность))
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.