Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Решение задачи авторизации

00 голосов
6
Есть стандартная форма авторизации + пользовательское поле. Как сделать так, чтобы пользователю был присвоен тот или иной идентификатор группы, в зависимости от выбора поля?
спросил 12 Окт, 13 от Fatima (120 баллов)

6 Ответы

00 голосов
http://dev.1c-bitrix.ru/api_help/main/events/onbeforeuserregister.php
Код
<?
// файл /bitrix/modules/my_module_id/include.php
class MyClass
{
    // создаем обработчик события "OnBeforeUserRegister"
    function OnBeforeUserRegisterHandler(&$arFields)
    {
        // если пользователь пришел по рекламной кампании #34, то
        if ($_SESSION["SESS_LAST_ADV_ID"]==34)
        {
            // добавляем его в группу #3
            $arFields["GROUP_ID"][] = 3;    

            // добавим административный комментарий
            if (intval($_SESSION["SESS_ADV_ID"])>0)
                $arFields["ADMIN_NOTES"] = "Рекламная кампания #34 - прямой заход";
            else
                $arFields["ADMIN_NOTES"] = "Рекламная кампания #34 - возврат";

            $arFields["SITE_ID"] = "ru";
        }
    }
}
?>


Это не подходит?! ;)

Думаю, ошибся. Вы имели в виду авторизацию? Или все-таки регистрацию?! Тогда, что за группа нужна?
ответил 31 Окт, 13 от Serofim (800 баллов)
00 голосов
Всё! Решил задачку. УРА! На форуме есть подобные вопросы, но их решение не подходит из-за "грязи" т.к. регистрирует пользователя сразу в нескольких группах. описание метода здесь.

Я пошел другим путем. нашел файл: bitrix-modules-main-classes-general-user.php
в нем: function SetUserGroup($USER_ID, $arGroups)

сразу перед вставкой в таблицу, создал обращение к новой функции в которой делаю обращение к базе чтобы получить ID необходимой группы и присваиваю его переменной: $strGroups

в результате получилось:
Код
$strGroups = $UF_STATUS;
$strSql ="INSERT INTO b_user_group(USER_ID, GROUP_ID) ".      
"SELECT ".$USER_ID.", ID ".               
"FROM b_group ".               
"WHERE ID in (".$strGroups.")";


теперь вопрос, как это все перенести из main-classes-general-user.php в свою папку так, чтобы все работало....
ответил 04 Фев, 14 от Fatima (120 баллов)
00 голосов
А Вы с документацией Битрикса знакомы? =)
ответил 24 Май, 14 от Serofim (800 баллов)
00 голосов
Цитата
А Вы с документацией Битрикса знакомы? =)


Знакомлюсь, учусь, решаю всякие примерчики, смотрю как реализовать то или другое. У меня получилось сделать регистрацию неограниченного количества групп пользователей, в зависимости от выбора из списка при регистрации. Но, насколько я понимаю, редить user.php не следует из-за того что он может затереться обновлениями, правильно? а какой выход тогда из подобной ситуации?
ответил 20 Сен, 14 от Fatima (120 баллов)
00 голосов
Ну почему вы полезли сразу туда?! =) Я Вам не то подсказал? Подглядите там по ссылке. Там есть всякая всячина!!! )))
Код
// файл /bitrix/php_interface/init.php 
// добавляем обработчик события при регистрации 
AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserRegisterHandler"); 
// а заодно и при обновлении данных пользователем 
AddEventHandler("main", "OnBeforeUserUpdate", "OnBeforeUserRegisterHandler"); 

// описываем саму функцию 
function OnBeforeUserRegisterHandler($args) 
  { 
   if (!ereg("^[a-zA-Z0-9_-]+$",$args['LOGIN'])) 
   { 
   $GLOBALS['APPLICATION']->ThrowException('Логин может состоять из латинских букв, цифр, знаков "-" и "_"'); 
   return false;   
   } 
  return true; 
  } 

Это оттуда же. И ничего не потрется. А если по Вашему методу, то думаю, секрет кроется в этой строчке:
Код
// файл /bitrix/modules/my_module_id/include.php 

Надо создать свою папку модуля. Могу ошибаться. ;)
ответил 25 Янв, 15 от Serofim (800 баллов)
00 голосов
проблема в том, что таким образом при регистрации событий в обработчике, я регистрируюсь в нескольких группах, а именно: 2- незарегистрированные пользователи, 5- зарегистрированные пользователи и та группа, которую я указываю. но мне еще надо вытаскивать из базы значение группы (т.к. оно не статичное) в соответствии с выбранным условием регистрации.

Чтобы было понятнее, напишу так: при регистрации имеем дополнительное пользовательское поле, где человек выбирает свой статус например географическая привязка по городам, каждый новый город - новая группа + новый защищенный раздел на сайте, список соответствий между группой и статусом хранится в другой таблице он растет и может динамически изменяться из панели управления.

Если воспользоваться обработчиком событий в init.php это более правильно, то как внутри обработчика получить нужную группу из таблицы?

Подскажите пожалуйста, чем чреваты дополнения и новые функции в user.php?

Спасибо.
ответил 09 Май, 15 от Fatima (120 баллов)

Похожие вопросы