【问题标题】:MediaWiki Extension:GoogleAppsAuthentification Multiple DomainsMediaWiki 扩展:GoogleAppsAuthentification 多域
【发布时间】: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


【解决方案1】:

除非我误解了你的需要:

如果您启用了 $_SESSION:

在“//在LocalSettings.py”中

第一行代码:启动会话引擎

<?php session_start(); ?>

数组定义点的代码:获取数组并将其复制到会话变量中,以便其他页面、函数等可以访问它。

<?php
$wgDefaultUserOptions['GoogleAppsDomainList'] = array("domain.com", "otherdomain.com");
$_SESSION['a']=$wgDefaultUserOptions['GoogleAppsDomainList'];
?>

在您希望进行下拉选择的页面上:

第 1 行代码:启动会话引擎

<?php session_start(); ?>

@需要下拉选择的点

<Form action="**processing page**" method="post">
<select name="Domain-Choice" >
 <?php
 foreach ($_SESSION['a'] as $key)
 {echo "<option value=\"".$key."\">".$key."</option>";}
 ?> 
 </select>
 </Form>

将您的表单操作设置为您想要的任何 PHP 处理页面,$_POST['Domain-Choice'] 将具有用户从下拉列表中选择的值,该下拉列表是从存储在会话变量中的数组中填充的,从数组中复制LocalSettings.py ($wgDefaultUserOptions['GoogleAppsDomainList'])

如果我误解了您的需要,请提前道歉。

【讨论】:

    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多