You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MediaWiki校验用户登录状态的代码位置及修改咨询

MediaWiki 登录校验逻辑定位及URL Token校验实现方案

核心校验逻辑代码位置

  • 默认Session校验的核心入口为includes/user/User.php中的loadFromSession()方法,所有页面请求初始化阶段都会调用该方法从Session加载当前登录用户的身份信息。
  • 会话管理的顶层逻辑位于MediaWiki\Session\SessionManager类(对应路径includes/session/SessionManager.php),负责全局会话的初始化和用户身份匹配,是默认校验流程的上游入口。
  • MediaWiki 1.35及以上版本还可通过UserLoadFromSession钩子介入校验流程,无需修改核心代码即可替换默认校验逻辑。

自定义URL Token校验实现方案

无需改动MediaWiki核心源码,通过注册钩子即可实现需求:

  1. 在你的自定义扩展或者LocalSettings.php末尾注册UserLoadFromSession钩子,该钩子会在系统尝试从Session加载用户之前触发,返回false即可终止默认Session校验流程。
  2. 参考以下示例实现你的token校验逻辑:
$wgHooks['UserLoadFromSession'][] = function ( User $user, &$loaded ) {
    // 获取URL中携带的校验token,参数名可自行修改
    $requestToken = $user->getRequest()->getVal('auth_token', '');
    if (empty($requestToken)) {
        // 无有效token时可直接返回走默认逻辑,或者直接返回未登录状态
        return true;
    }

    // 此处替换为你自己的token校验逻辑:校验token有效性、匹配对应用户ID
    $validTokenMap = [
        // 示例token映射,实际场景建议从数据库、缓存中读取有效token及关联用户
        'your_valid_token_123' => 2,
        'your_valid_token_456' => 5
    ];

    if (isset($validTokenMap[$requestToken])) {
        $targetUserId = $validTokenMap[$requestToken];
        $user->setId($targetUserId);
        $user->loadFromId();
        // 标记用户身份已加载,终止后续默认校验
        $loaded = true;
        return false;
    }

    return true;
};
  • 注意:不要直接使用MediaWiki原生的用户令牌作为URL传输的校验token,原生令牌的安全设计不适合暴露在URL中,你需要自行实现token的生成、过期校验、单次有效性校验、销毁逻辑,避免身份伪造风险。
  • 如果你需要对MediaWiki托管的静态资源(图片、附件等)也做token校验,需要额外修改includes/Media.php中的资源输出前置逻辑,MediaWiki默认不会对静态资源走用户身份校验流程。

内容的提问来源于stack exchange,提问作者Rafael Kasper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:15:03