Авторизация админа во фронте
Добрый день! Когда то встречал это решение но сейчас не могу. Как сделать так чтобы администратор автоматически авторизовался на сайте когда авторизован в админке. Для авторизации использую 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
к сожалению данный вариант не сработал
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.