web-dev-qa-db-fra.com

Intégrer WordPress à mon site Web tout en conservant mon propre système d'authentification

J'ai récemment intégré WordPress à mon site Web et j'essaie de trouver la bonne façon de remplacer le système d'authentification de Wordpress par celui de mon site Web.

Mon site Web possède déjà une base de données d'utilisateurs, qui est authentifiée par le biais de PHP sessions.

Mon objectif est simplement de supprimer le formulaire de connexion/enregistrement intégré à WordPress et de le rendre tel que les utilisateurs déjà connectés à mon site Web aient accès aux fonctionnalités de Wordpress simplement via session_start() (et la vérification des privilèges). Je n'utiliserais pas la base de données utilisateur de Wordpress.

La plupart des informations que j'ai trouvées sur ce sujet concernent principalement l'intégration d'une base de données externe à Wordpress, comme le plug-in Authentification de la base de données externe reloaded , mais très peu sur la façon de changer réellement la manière dont WordPress vérifie si l'utilisateur est connecté avant de donner lui l'accès.

Je voudrais bien comprendre comment autoriser les utilisateurs connectés sur mon site Web à obtenir les mêmes privilèges que s'ils étaient également connectés à mon WordPress (en vérifiant si $_SESSION['simple_auth'] == true)

Je comprends que cette question a déjà été posée. J'ai fait des recherches, mais je cherche surtout des conseils sur la façon de procéder (ou la raison pour laquelle je ne devrais pas le faire), ainsi que des directives susceptibles de m'aider.

3
apatik

Est-ce qu'utiliser Auth0 ( http://www.auth0.com ) est peut-être une option pour vous? Ils ont un très bon plugin Wordpress.

Je pense que vous pourriez intégrer votre système et faire un Single Sign On (SSO) en utilisant le plugin.

Je pense que c'est une meilleure option pour vous de faire des choses sur votre système à intégrer (puisque vous connaissez le système et peut probablement être plus productif), en utilisant ceci https://auth0.com/docs/oauth-web-protocol et laissez le plugin s'occuper de tout sur Wordpress.

1
fsenna

Le système d'authentification de WordPress est composé de fonctions enfichables , ce qui signifie que vous pouvez écrire un plugin doté d'une fonction nommée, par exemple, wp_authenticate(), et que votre site utilisera votre - wp_authenticate() à la place de la fonction native. WordPress un.

Votre commentaire à propos de is_user_logged_in() (sur votre message d'origine) est évité par le fait que is_user_logged_in() appelle le pluggable wp_get_current_user(), ce qui signifie que vous pouvez écrire votre propre wp_get_current_user() et contrôler is_user_logged_in() de cette façon.

Donc, vous devriez être capable d'écrire un système d'authentification pour WordPress qui utilisera votre base de données d'utilisateurs préexistante.

Références

1
Pat J

Voici un exemple de plugin d'authentification. Il va tirer des informations de vos variables de session php. Voici comment l'utiliser:

  1. enregistrez-le dans un fichier mycustom-auth.php
  2. modifier les constantes près du sommet de la classe
  3. mettez-le dans wp-content/plugins/mycustom_auth ou wp-content/mu-plugins
  4. l'activer dans wp-admin
  5. déconnectez-vous de WP et reconnectez-vous. Vous devriez voir une ligne supplémentaire dans le formulaire de connexion WP pour vous rendre à votre authentificateur personnalisé. Cliquez dessus, puis retournez à WP pour voir si vous êtes connecté
 
/* 
 Nom du plugin: mycustom Authenticator 
 Description: s'authentifie auprès d'un authentifiant personnalisé utilisant des sessions php 
 Version: 1.0 
. */
 
 
 new mycustom_auth (); 
 class mycustom_auth {
 const AUTH_URL = 'http://domain.com/mylogin.php '; // URL d'authentification personnalisée 
 const USERNAME = "username"; // Variable de session php pour le nom d'utilisateur 
 const EMAIL = "email"; // Variable de session php pour l'adresse de messagerie 
 const FIRSTNAME = "first"; // Variable de session php pour prenom - facultatif 
 const LASTNAME = "last"; // Variable de session php pour le nom de famille - optionnel 
 
 function mycustom_auth () {
 add_filter ('authenticate', array ($ this, 'authenticate'), 20, 3); 
 add_action ('login_form', array ($ this, 'login_form')); 
 add_action ('login_head', array ($ this, 'login_head')); 
 
 // remove_filter ('authenticate', 'wp_authenticate_username_password', 20, 3); 
} 
 
 fonction authenticate ($ utilisateur, $ utilisateur, $ mot de passe) { 
 if (is_a ($ user, 'WP_User')) {
 return $ user; 
} 
 $ uid = $ _SESSION [mycustom_auth :: USERNAME]; 
 $ email = $ _SESSION [mycustom_auth :: EMAIL]; 
 $ prénom = $ _SESSION [mycustom_auth :: FIRSTNAME]; 
 $ lastname = $ _SESSION [mycustom_auth :: LASTNAME] ; 
 if (! isset ($ _SESSION [mycustom_auth :: USERNAME]) || empty ($ uid)) {
 renvoie new WP_Error ('invalid_username', __ (' Erreur de connexion personnalisée : php session not set. ')); 
} 
 $ user = get_user_by (' login ', $ uid); // pourrait obtenir l'adresse e-mail à la place de 
 if (! $ user) {
 $ user = $ this-> create_user ($ uid, $ email, $ prénom, $ dernier nom); 
 if (! $ user) {
 renvoie new WP_Error ('invalid_username', __ (' Erreur de connexion personnalisée : vous n'êtes actuellement pas inscrit sur ce site.')); 
} 
} 
 renvoie new WP_User ($ user-> ID); 
} 
 
 function create_user ($ username, $ email, $ firstname, $ lastname) {
 if (empty ($ username) || empty ($ email)) renvoie null; 
 $ user_id = wp_insert_user (array ('user_login' => $ username, 
 'user_email' => $ email, 'prénom_nom' => $ prénom, 'dernier_nom' => $ dernier nom)); 
 $ user = new WP_User ($ user_id); 
 $ user-> set_role (mycustom_auth :: DEFAULT_ROLE); 
 renvoie $ user; 
} 
 
 function login_form () {
 echo ' '. __ ('Login with Custom', 'custom_login'). ''; 
} 
 
 function login_head () {
 // place le style personnalisé ici 
} 
} 
 
 
?> 
0
user42826