web-dev-qa-db-fra.com

Déconnexion via un sous-domaine, page non wordpress sur un serveur différent?

Semblable à la question sur at Permet à la fonction wp_logout_url de fonctionner sur une page externe (non-Wordpress)

Le problème auquel je suis confronté est le fait que le sous-domaine est sur un serveur différent, donc je suis incapable d'inclure/d'exiger le fichier wp-blog-header.php.

Existe-t-il un moyen de mettre en liste blanche des domaines pouvant autoriser des déconnexions instantanées, comme pour la liste blanche de redirection .

Sinon, comment puis-je autoriser les sous-domaines (il dispose d'un accès SQL distant) à créer un lien de déconnexion valide qui ignore l'avis "Êtes-vous sûr de vouloir vous déconnecter".

Re: @SatbirKira

Cela ressemble-t-il à un travail logique pour s'assurer que la déconnexion est "valide" dans une certaine mesure:

  • Définissez l'URL de déconnexion toutes les 24 heures pour qu'une chaîne de requête avec une chaîne aléatoire lui soit ajoutée, par exemple: http://website.com/custom_logout.php?confirm=sj239ks, suivi de http://website.com/custom_logout.php?confirm=32k9la3.

Chaque fois qu'il modifie, il édite un fichier spécifique (custom_logout.php sur l'autre serveur OR un fichier txt/ini sur son propre serveur OR un autre serveur) et crée un tableau/une liste. de cordes

$confirmkeys = array("sj239ks", "32k9la3");

ou

[confirmkeys]
confirm[] = sj239ks
confirm[] = 32k9la3

Il n’aurait jamais que 2 clés de confirmation dans le fichier, une pour 24 heures (si la page est toujours ouverte) et une pour les 24 heures actuelles.

J'imagine que la même chose pourrait être faite individuellement plutôt que globalement, mais existe-t-il un besoin urgent pour cela?

  • Éditez custom_logout.php pour ajouter une vérification pour voir si $_SERVER['HTTP_REFERER'] provient du même domaine (tous les sous-domaines). Si c'est le cas, définissez matching_referer sur true. Si ce n'est pas le cas, définissez la variable sur false.

  • Éditez custom_logout.php pour ajouter une vérification pour voir si la chaîne de requête correspond à une chaîne stockée dans un fichier spécifique. (plus facile à faire avec un fichier txt/ini sur le serveur secondaire?) S'il correspond, définissez matching_confirm sur true. Si ce n'est pas le cas, définissez la variable sur false.

  • Éditez custom_logout.php et faites-le aussi longtemps si une ou plusieurs vérifications sont vraies pour qu'elle se déconnecte proprement, si elles sont toutes les deux fausses déconnexion avec l'avertissement en les envoyant à la page /wp-login.php?action=logout?

2
Ryflex

Vous pouvez créer un fichier nommé custom_logout.php et le placer dans le répertoire racine de wordpress. Cela contient

<?php 
     require_once("wp-load.php"); //load wordpress
     wp_logout(); //logout
     exit(); //end page
?>

Ensuite, dans votre site de sous-domaine, ouvrez l'URL avec une balise d'ancrage

<a href="http://youwebsite.com/custom_logout.php">Logout</a>

Vous ne pouvez pas créer facilement une liste blanche, car cela impliquerait de vérifier la provenance de l'utilisateur à l'aide de $ _SERVER ['HTTP_REFERER'], ce qui n'est pas fiable (généralement null). Malheureusement, il n’existe pas de solution simple.

Répondre à votre édition

Vous êtes tout à fait libre d'appliquer l'approche de clé temporaire s'il s'agit d'un compromis responsable. Cependant, au lieu de deux clés aléatoires, vous pouvez envoyer un hachage md5 du jour actuel. Utilisez un sel secret identique sur les deux serveurs. Maintenant, vous pouvez simplement recalculer le hachage d'hier et celui du jour actuel dans custom_logout.php et les comparer à la variable get entrante. Cela élimine le besoin d'un fichier txt/ini.

1
Satbir Kira

En supposant que vous soyez l'administrateur des deux sites ...

Ajoutez admin ajax handler dans votre site wp principal ...

add_action( 'wp_ajax_logout', 'my_logout_callback' );
function my_logout_callback() {
    wp_logout(); // Log out
    header('Location: http://www.example.com/successfully-logged-out');// Maybe redirect user somewhere?
    wp_die();
}

Dans votre site de sous-domaine, cliquez sur le gestionnaire admin ajax du site principal ...

<a href='//example.com/wp-admin/admin-ajax.php?action=logout'>Logout</a>
2
shramee