【问题标题】:Mediawiki authentication by checking API with Ruby or JavascriptMediawiki 通过使用 Ruby 或 Javascript 检查 API 进行身份验证
【发布时间】:2014-05-01 16:48:29
【问题描述】:

我想查看用户是否登录到我的 mediawiki 应用程序。我认为解决它的一个好方法是向 mediawiki 应用程序发出 API 请求并检查用户是否已登录。唯一的问题是我对 JSON 或 API 完全没有经验:s :D。

我环顾四周,发现了这个好看的宝石:https://github.com/jnunemaker/httparty

有了这个 gem,我可以检查我的 api。一个例子是:

response = HTTParty.get('https://en.wikipedia.org/w/api.php')

这样我得到了一堆有用的数据。然而,问题是这个请求是代表服务器而不是用户完成的。我将无法查看用户是否已登录,但我可以查看我的服务器是否已登录。我不在乎...

关于如何代表用户执行此 api 请求的任何解决方案?也许在其中一种观点中?

如果我能像 mediawiki 那样做就好了:https://www.mediawiki.org/wiki/Special:ApiSandbox#action=query&meta=userinfo&format=json

也许你可以做一些 javascript 来解决这个问题......

【问题讨论】:

  • 您的意思是您正在编写一个在某个域上运行的应用程序,并且您想检查用户是否登录到在同一域上运行的 MediaWiki 安装?
  • 是的。无论如何,这将是一种不同类型的应用程序。我不习惯用php写...
  • 你看这里的答案了吗:stackoverflow.com/questions/2764509/…
  • 如果您的 ruby​​ 应用程序在同一台机器上运行,那么您可以根据会话文件检查 cookie,因为这是 php/Mediawiki 所做的。
  • 我无法在开发模式下进行测试。而且我实际上不确定是否要在同一台服务器上使用它。那里已经有足够多的应用程序在运行...

标签: javascript php ruby-on-rails mediawiki mediawiki-api


【解决方案1】:

您可以为您的 MediaWiki 安装编写一个非常简单的API extension,让您查询 API 以检查某个用户是否已登录。使用 User::isLoggedin 进行实际检查。

您可以在 https://www.mediawiki.org/wiki/API:Extensions 使用骨架,然后将 function execute() 替换为如下内容:

public function execute() {

    $userName = $this->getMain()->getVal('user');
    $user = User::newFromName($userName);

    $isLoggedIn = $user->isLoggedIn ();

    if ( $isLoggedIn ) {

        $returnValue = 'yes';

    } else {

        $returnValue = 'no';

    }

    $this->getResult()->addValue( null, $this->getModuleName(),
                                  array ( 'loggedin' => $returnValue ) );

    return true;

}

现在您可以使用 Ruby 或 Javascript(或其他)查​​询 API:

api.php?action=checkIfUserIsLoggedIn&user=AdaLovelace&format=json

【讨论】:

  • 听起来是个好主意。问题是我在 Ruby 应用程序中没有用户的用户名。这就是我想知道的信息。有没有办法检查哪个用户使用哪个 IP 地址登录?在这种情况下,我可以从我的 Ruby 应用程序中获取 IP 地址,使用 mediawiki 检查它以查看谁已登录,获取用户名,然后让用户登录:)。谢谢狮子座
  • NVM。 IP地址不起作用。如果我使用它,每个 IP 地址只能有一个人登录:D。
【解决方案2】:

您可以使用 cookie。如果您查看 cookie 集,您有 <i>wikiName</i>UserID<i>wikiName</i>UserName<i>wikiName</i>_session。如果他们已注销,则将设置 <i>wikiName</i>LoggedOut 并删除 <i>wikiName</i>UserID。只要您的应用位于同一域中,这将起作用。

详情请见https://www.mediawiki.org/wiki/Cookie_tracking

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2016-09-29
    • 2017-03-03
    • 2015-09-10
    相关资源
    最近更新 更多