使用Active Directory和Windows身份验证自动登录

时间:2011-07-13 作者:Curtis

我已经能够设置并使用两个不同的LDAP插件(CoSign SSO,Simple LDAP Logon)基于Active Directory用户创建新的WordPress用户,但仍然需要他们手动登录才能发布帖子。有没有办法让它从浏览器中提取用户的凭据,并在用户访问WordPress站点时自动登录?我用Windows身份验证设置了IIS,并且URL在浏览器中列出,作为它可以信任的URL并向其发送凭据。

我是否需要另一个插件,或者这需要在WordPress中编辑一两个页面?

谢谢

2 个回复
最合适的回答,由SO网友:Scott 整理而成

如果将Windows身份验证与IIS一起使用,PHP可以读取登录的当前经过身份验证的用户$_SERVER["LOGON_USER"];

如果设置了此选项,并且用户没有收到HTTP身份验证提示,则可以假定用户凭据是正确的。因此,通过一些WP编码,您可以读取$_SERVER[\'LOGON_USER\'] 如果未登录到WP,则使用该用户名自动登录。

place in theme functions file or in a MU plugins file.

function auto_login() {
    if (!is_user_logged_in() && isset($_SERVER[\'LOGON_USER\'])) {
        $user_login = $_SERVER[\'LOGON_USER\'];
        $user = get_userdatabylogin($user_login);
        $user_id = $user->ID;
        wp_set_current_user($user_id, $user_login);
        wp_set_auth_cookie($user_id);
        do_action(\'wp_login\', $user_login);
    }
}
add_action(\'init\', \'auto_login\');
您可能需要对$user_login 变量,以便获得与WP表中匹配的正确用户名。

SO网友:mor7ifer

您可以使用类似的方法处理注销问题

function auto_login() {
    if ( !is_user_logged_in() && isset($_SERVER[\'LOGON_USER\']) && my_logout_cookie_check() === false ) {
        $user_login = $_SERVER[\'LOGON_USER\'];
        $user = get_userdatabylogin( $user_login );
        $user_id = $user->ID;
        wp_set_current_user( $user_id, $user_login );
        wp_set_auth_cookie( $user_id );
        do_action( \'wp_login\', $user_login );
    }
}
add_action( \'init\', \'auto_login\' );
add_action( \'wp_logout\', \'my_logout_cookie\' );
function my_logout_cookie() {
    setcookie( \'logout\', \'true\' );
}
function my_logout_cookie_check() {
    if( $_COOKIE[\'logout\'] === \'true\' )
        return true;
    else
        return false;
}
和另一个在登录时销毁此cookie的函数

add_action( \'wp_login\', \'my_logout_cookie_destroy\' );
function my_logout_cookie_destroy() {
    setcookie( \'logout\', \'false\' );
}
此解决方案未经测试。如果您已经有了页面输出,那么您可能会遇到设置cookie的问题,但我认为这可以相对容易地克服。

结束

相关推荐

Integrating plugins in themes

我找不到讨论这个的帖子,所以开始这篇。我目前正在为3.1+开发一个相当复杂的主题,我的意思是,除了样式和常规的前端功能之外,我还在主题的核心包括后端和前端的插件。因此,为了使这一点更有条理,我将其分为三个问题:集成插件是一种常见的做法吗</自动更新主题/插件有什么影响/复杂之处</在不破坏现有功能的情况下,包含每个插件的最佳方式是什么