Je programme actuellement un mécanisme de connexion unique pour mon site Wordpress afin de permettre l'authentification du système de support technique de mon entreprise auprès de Wordpress.
Afin de permettre que cela se produise, j'utilise wp_signon () pour connecter l'utilisateur s'il n'est pas déjà connecté. Voici une version simplifiée de ce que je fais:
<?php
define('WP_USE_THEMES', false);
require("wp-blog-header.php");
if(!is_user_logged_in() && $_POST["log"] == "") {
//redirect to login form that submits to this PHP script
exit(0);
}
if(!is_user_logged_in() && $_POST["log"] != "") {
$creds = array('user_login' => $_POST["log"], 'user_password' => $_POST['pwd'], 'remember' => $_POST["rememberme"]);
$user_info = wp_signon($creds, false);
if(!is_a($user_info, 'WP_Error')) {
$username = $_POST["log"];
wp_set_current_user($user->ID, $username);
wp_set_auth_cookie($user->ID, true, false);
do_action('wp_login', $username);
} else {
write_log(ERROR, "Error authenticating: " . $user_info->get_error_message($user_info->get_error_code()));
}
$user_info = wp_get_current_user();
/* Code from here uses user attributes to generate and encrypt a single sign-on token */
?>
Le problème auquel je suis confronté est que même après avoir appelé wp_signon()
, wp_set_current_user()
, wp_set_auth_cookie()
et les actions de connexion, l'utilisateur n'est toujours pas connecté. J'obtiens son objet $ user_info, mais il n'est pas connecté à Wordpress. ils suivent un lien sécurisé depuis le système de support, ils ne peuvent pas accéder à la page et doivent se reconnecter (ce qui annule l'objectif de l'authentification unique).
De plus, j'ai essayé de remplacer toute la section wp_signon()
par auth_redirect()
, ce qui a permis de connecter l'utilisateur au site, mais je constate qu'ils sont redirigés vers la page de profil, même si l'URL contient un paramètre de requête pour les rediriger à mon script.
Vous devez vous assurer que votre code est exécuté avant l'appel de auth_redirect()
.
En termes simples, vous devez accrocher toute la fonction en utilisant l'action setup_theme
. Cela a fonctionné dans mon cas.