Я использую приведенный ниже код для входа пользователей в интрасеть с использованием Kerberos.
Проблема в том, что он работает нормально, если пользователь использует диалоговое окно kerberos (см. Скриншот), но если пользователь настроил свой браузер на использование negotiate-auth.trusted-uris
он не может получить доступ к wp-admin и всегда блокируется страницей wp-login.
Зачем? И как я могу решить эту проблему?
Спасибо
add_action('init', 'kerberosauth');
add_action('admin_init', 'kerberosauth',1);
add_filter("authenticate", "kerberosauth", 10, 3);
function kerberosauth()
{
if(isset($_SERVER['PHP_AUTH_USER'])):
$remote_user = $_SERVER['PHP_AUTH_USER'];
if(!is_user_logged_in()):
if(get_user_by('email', $remote_user)):
$user = get_user_by('email', $remote_user);
$ID = $user->ID;
$pass = $user->user_pass;
$login = $user->user_login;
kb_log_user($ID,$login);
else: //Créer l'utilisateur
kb_create_user($remote_user);
endif;
// else:
endif;
endif;
}
function kb_log_user($ID,$login)
{
wp_set_current_user( $ID );
do_action('set_current_user');
wp_set_auth_cookie( $ID,$remember = true );
//do_action( 'wp_login', $login );
wp_get_current_user();
//echo "You are logged in ".$login;
}
function kb_create_user($user)
{
$username = preg_replace("/\@(domain)\.(tld)/", "", $user);
$pwd = isset($_SERVER['PHP_AUTH_PW'])?$_SERVER['PHP_AUTH_PW']:wp_generate_password(12);
wp_create_user($username,$pwd,$user );
//lancer l'authentification
kerberosauth();
print_r("User created ".$username);
}
Задача ещё не решена.
Других решений пока нет …