Mediawiki认证通过检查API与Ruby或Javascript

Mediawiki authentication by checking API with Ruby or Javascript

本文关键字:Ruby Javascript API 检查 认证 Mediawiki      更新时间:2023-09-26

我想看看用户是否登录到我的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安装编写一个非常简单的API扩展,它允许您查询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

您可以使用cookie。如果你看饼干集,你有wikiNameUserID, wikiNameUserNamewikiName_session。如果他们已经注销,那么wikiNameLoggedOut将被设置,wikiNameUserID将被删除。这将工作,只要你的应用程序是在同一域名。