【发布时间】:2014-04-14 01:29:26
【问题描述】:
我一直在为 mediawiki 使用出色的 GoogleAppsAuthentification 扩展程序,以允许我的用户使用他们的 Google Apps 帐户登录。我们最近向我们的 Google Apps 添加了另一个域,我想为这些用户提供使用他们的 Google Apps 域登录我们的 wiki 的选项。
开箱即用,这对于扩展是不可能的,但是添加多域支持似乎很简单。
这个想法是在执行重定向到 Google 的登录屏幕之前使用可用域的下拉列表提示用户。
我对 mediawiki API 的了解相当有限,我可以使用一些指针。
扩展挂钩到 UserLoadFromSession 挂钩,该挂钩在 UserLoginForm 挂钩之前调用。我必须向该函数添加代码以提示用户输入域,然后返回该函数,将所选域传递给 getGoogleAccount()
// in LocalSettings.py
$wgDefaultUserOptions['GoogleAppsDomainList'] = array("domain.com", "otherdomain.com");
// in GoogleAppsAuthentication.php
function fnGoogleAppsAuthenticateHook($user, &$result){
global $IP, $wgLanguageCode, $wgRequest, $wgOut, $wgDefaultUserOptions;
if (isset($_REQUEST["title"])){
$lg = Language::factory($wgLanguageCode);
if ($_REQUEST["title"] == $lg->specialPage("Userlogin")){
// this is where we need to add the prompt
// that asks the user which domain to chose
$domain = getDomainFromUser($wgDefaultUserOptions['GoogleAppsDomainList'])
// Setup for a web request
require_once("$IP/includes/WebStart.php");
// Here we do our stuff
$googleAccount = getGoogleAccount('title=' . $_REQUEST["title"], $domain);
// whole bunch of code here that won't be affected by our change
...
// end whole bunch of code that won't be affected by our change
} else if ($_REQUEST["title"] == $lg->specialPage("Userlogout")) {
session_unset();
// Logout
$user->logout();
}
}
// Back to MediaWiki home after login
return true;
}
function getDomainFromUser($domainList) {
// render page with dropdown containing domains in $domainList
// get selected dropdown on page submit
// return selected domain
}
我需要一些关于 getDomainFromUser() 函数的帮助。我不知道如何重定向到显示由 LocalSettings.py 中定义的数组填充的下拉菜单的新页面,并将所选值返回给 fnGoogleAppsAuthenticateHook 函数。
任何帮助将不胜感激。我相信更多的人可以从添加到此扩展程序的附加功能中受益。
【问题讨论】:
-
您是否尝试将您的 Apps 域的整个电子邮件地址输入到此(即 user@myAppsdomain.com)?如果您现在将 google.com 设置为应用程序域,这似乎可行。
标签: php oauth openid mediawiki google-apps