Как проверить, вошел ли пользователь в mediawiki в другое приложение? - PullRequest
4 голосов
/ 31 января 2010

Вот ситуация:

У меня есть установка mediawiki и несколько дополнительных серверных сценариев, которые требуют больше ресурсов и уже написаны на другом языке (python). Код Python будет очень слабо связан с кодом MediaWiki (вызывается только по ссылке здесь или там)

Я хотел бы, чтобы при выполнении команды GET или POST на сервер для выполнения сценария Python я хотел бы проверить, не вошел ли пользователь в mediawiki. Если нет, я бы хотел просто перенаправить их на страницу входа в MediaWiki. Есть идеи?

Есть несколько статей по интеграции mediawiki с другими PHP-фреймворками, такими как drupal и forum forum, но это больше, чем мне нужно.

What is the best way to do this?
-check for cookies somehow (is this secure?)
-does the mediawiki db keep track of who is logged in?

Спасибо

Ответы [ 4 ]

1 голос
/ 29 марта 2011

MediaWiki проверить, если вы вошли в систему:

<?php
global $wgUser;
require_once('StubObject.php');
if( StubObject::isRealObject( $wgUser ) &&  $wgUser->isLoggedIn())
{

// code or HTML

}
?>

Я также видел следующее для скинов (т.е. MonoBook.php), но я не проверял:

if(!$this->data['loggedin']) {

}

Внимание: обязательно проверьте! У людей могут быть способы обойти вышеуказанные тесты ... предоставляя им доступ к контенту. Я использую это, чтобы просто скрыть меню. Если кто-то обошел описанный выше метод, я не возражаю, так как он видит только меню.

1 голос
/ 15 декабря 2010

Я не могу комментировать сообщение Джона из-за отсутствия привилегий, поэтому я публикую новый ответ, чтобы подробно рассказать о его использовании MediaWiki API и передаче файлов cookie. Надеюсь, это кому-нибудь поможет.

Вы можете использовать библиотеку PHP cURL для передачи значения cookie сеанса в качестве файла cookie на страницу api.php в вашей вики (вам нужно создать полный URL-адрес для cURL, чтобы получить страницу). Имя файла cookie сеанса - это либо значение $ wgSessionCookie (которое по умолчанию установлено в false и не используется), либо $wgCookiePrefix . '_session' (по умолчанию для $ wgCookiePrefix установлено значение false и по умолчанию используется имя базы данных). Поэтому, исходя из ваших настроек, используйте соответствующее значение.

Я использую api.php?action=query&format=xml&meta=userinfo, а затем ищу идентификатор пользователя, который возвращается в вики (Примечание format = xml ). Идентификатор 0 означает, что пользователь является анонимным.

Вот полный код функции, которую я использую (я понимаю, что не проверяю некоторые возможные состояния ошибки). Возможно, вам придется изменить значение $ session_cookie

function isLoggedIn()
{
  $session_cookie = 'wikidb_session';
  if(!isset($_COOKIE[$session_cookie]))
  {
    return false;
  }

  $url = ((isset($_SERVER['HTTPS']))?'https://':'http://') .
         $_SERVER['HTTP_HOST'] .
         (($_SERVER['SERVER_PORT'] != 80)?':' . $_SERVER['SERVER_PORT']:'') .
         '/wiki/api.php?action=query&format=xml&meta=userinfo';

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_COOKIE, $session_cookie . '=' . $_COOKIE[$session_cookie]);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  $ret = curl_exec($ch);
  curl_close($ch);

  return preg_match('/id="(\d+)"/',$ret,$id) && $id[1];
}

Примечание. Если вы только проверяете, возвращается ли anon = "" или id = "0" вызовом api.php, в случае, если вызов возвращает что-то неожиданное или api.php отсутствует в URL, функция сообщит о том, что пользователь вошел в систему, поэтому лучше проверить возвращаемый идентификатор.

1 голос
/ 01 февраля 2010

Вы можете использовать MediaWiki API , чтобы получить информацию о пользователе и проанализировать ее в XML.

0 голосов
/ 16 марта 2010

Все, что вам нужно сделать, - это, по сути, перенаправить сеанс, файлы cookie и все в API, как если бы пользователь запрашивал.

Как можно поступить так? Я могу получить доступ к API напрямую и посмотреть информацию о моем входе в систему, но если я получу доступ к нему через PHP, он покажет, что я не вошел в систему (идентификатор анонимного пользователя "0"). Как переслать сеанс, файлы cookie и т. Д. В API через PHP для отображения информации о пользователе?

...