Авторизация админа во фронте
        Добрый день! Когда то встречал это решение но сейчас не могу. Как сделать так чтобы администратор автоматически авторизовался на сайте когда авторизован в админке. Для авторизации использую office.
Заранее спасибо
    
    
                                                                                
            Заранее спасибо
Комментарии: 16
switch ($modx->event->name) {
  case 'OnWebPageInit':
    if ($modx->context->key == 'mgr') {
      return;
    }
    /** авторизовывает админа в админке (если он не авторизован на фронте, и является администратором) */
    if (!$modx->user->hasSessionContext('mgr') && $modx->user->hasSessionContext($modx->context->key) && ($modx->user->get('sudo') || $modx->user->isMember('Administrator'))) {
      $modx->user->addSessionContext('mgr');
    }
    /** авторизовывает на фронте любого юзера, который авторизован в админке */
    if ($modx->user->hasSessionContext('mgr') && !$modx->user->hasSessionContext($modx->context->key)) {
      $modx->user->addSessionContext($modx->context->key);
    }
    break;
}            
                *(если он авторизован на фронте, и является администратором)            
                    
                Сделал как все написали, обновил кеш, и теперь вообще не могу войти в админку ((            
                    
                Чтобы попасть в админку, зайдите через phpmyadmin а свою базу, в таблице modx_site_plugins (вроде так называется) найдите это плагин, запомните его id, потом в таблице modx_pluginevents (тоже как-то так называется) удалите записи, у которых поле plugin_id равен id вашего плагина. И очистите кеш, удалив папку /core/cache.
А лучше лождитесь спать, отдыхайте, а завтра я вам точно скажу названия таблиц и столбцов. Где-то после обеда.
И завтра же подумаем как нормпльно завести это плагин на вашем сайте)
                    А лучше лождитесь спать, отдыхайте, а завтра я вам точно скажу названия таблиц и столбцов. Где-то после обеда.
И завтра же подумаем как нормпльно завести это плагин на вашем сайте)
                да спасибо уже вошел ))            
                    
                Ну тгда вообще супер)            
                    
                ))            
                    
                спасибо вам большое, подскажите еще один момент это как я понял плагин нужно создать или где то в коде прописать            
                    
                спасибо вам большое за развернутый ответ            
                    
                Не за что)
Только имейте в виду — разлогиниться при таком подходе, практически нереально. Только если неделю на сайт не заходить, пока авторизационные куки не умрут.
Если автологин в админку не нужен, то первый блок if {} лучше закомментировать (тот, который «авторизовывает админа в админке»):
                    Только имейте в виду — разлогиниться при таком подходе, практически нереально. Только если неделю на сайт не заходить, пока авторизационные куки не умрут.
Если автологин в админку не нужен, то первый блок if {} лучше закомментировать (тот, который «авторизовывает админа в админке»):
//    if (!$modx->user->hasSessionContext('mgr') && $modx->user->hasSessionContext($modx->context->key) && ($modx->user->get('sudo') || $modx->user->isMember('Administrator'))) {
//      $modx->user->addSessionContext('mgr');
//    }            
                ясно спасибо            
                    разлогиниться при таком подходе, практически нереальноЯ бы так не сказал. Просто в том же Office указываешь &addContexts — все контексты, в том числе и админки (например &addContexts=`web,mgr`)
                С помощью Office'а можно залогиниться в админке с фронтенда, но не наоборот.            
                    
                Точно, я забыл. Я использовал для этого плагин. Вот мой вариант плагина:
                    <?php
$currentSiteGroup = $modx->getOption("multisite_site_group");
if(empty($currentSiteGroup)) return;
$currentContext = $modx->context->get("key");
$currentContextSettings = $modx->getCollection('modContextSetting', array('key' => "multisite_site_group", "value" => $currentSiteGroup));
foreach($currentContextSettings as $currentContextSetting)
{
    $contextKey = $currentContextSetting->get('context_key');
    if($contextKey!="mgr" && $contextKey!=$currentContext)
    {
        if($user)
        {
            if($modx->event->name=="OnWebLogout")
            {
                $modx->user->removeSessionContext($contextKey);
            }
            else if($modx->event->name=="OnWebLogin")
            {
                $modx->user->addSessionContext($contextKey);
                $_SESSION['modx.'.$contextKey.'.session.cookie.lifetime']=$attributes["lifetime"];
            }
        }
    }
}Галки на системных событиях: OnWebLogin и OnWebLogout            
                к сожалению данный вариант не сработал            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    
            
            
                    
                    
                