2012-11-05 56 views
3

是否可以暂停和恢复Mediawiki编辑?暂停和恢复Mediawiki编辑会话

为了解释,我写了一个访问外部数据库的MW扩展;此数据库需要OAuth身份验证,这是一个三步过程,要求用户重定向到外部站点以允许扩展访问外部数据库。如果MW扩展已经有extDb的访问令牌,一切都很好。但是,如果没有令牌,则存在问题。这是一个标签扩展,通过在wiki页面中查找某个XML标签来触发,这通常发生在编辑的“预览”或“提交”中,例如, (解析器钩子是ParserFirstCallInit)。由OAuth代码构建的回调网址会将您返回到您正在编辑的页面,但处于其编辑前状态:即,您将失去所有编辑。

如何恢复编辑而不会丢失编辑数据?

+0

此功能类似于(现在删除的)外部编辑器系统吗? https://www.mediawiki.org/wiki/Manual:External_editors – Nemo

回答

2

您可以使用将数据存储在$_SESSION中。 MediaWiki本身使用它来存储用户身份验证数据,所以它应该很好地与MediaWiki自己的会话处理集成在一起。

请注意,默认情况下,MediaWiki不会为匿名用户创建会话,除非他们尝试登录或执行其他需要会话的内容。如果您的外部身份验证代码仅供登录用户使用,则这不应该成为问题,但为了安全起见,您可能需要确保在尝试使用该会话之前设置了会话:

if (session_id() == '') { 
    wfSetupSession(); 
} 
+0

只有登录的用户才能编辑这个wiki,所以这很好。 我对mediawiki核心不是很熟悉;您能否提出任何可用于通过回调URL来触发加载特定会话的URL参数,例如: http://wiki.com/index.php?action=load&session= ?我查看了index.php的参数,但看不到任何适合的参数。 –

+0

呃......我不确定你想用你的回拨来完成什么。 PHP(以及MediaWiki)会话通常基于cookie进行加载,因此只要用户启用了cookie,他们就可以工作。它也可以[作为URL参数传递会话ID](http://www.php.net/manual/en/session.idpassing.php),但通常不建议(出于安全原因)和我不明白你为什么需要这样做。 –

+0

我想恢复我中断访问第三方网站的编辑(请参阅原始Q)。 –