Je suis sur le point de commencer à travailler sur un prototype pour un client. L'une des fonctionnalités requises est l'intégration avec un système d'authentification/d'enregistrement d'utilisateur interne.
Ce système agira comme une base de données d'utilisateurs faisant autorité et fournira une interface RESTful pour créer de nouveaux utilisateurs et authentifier les utilisateurs valides.
Je dois pouvoir créer de nouveaux utilisateurs dans WP et, dans le cadre de ce processus, appeler l'API d'authentification externe pour créer/valider cet utilisateur.
Une personne qui est un utilisateur valide, mais que WP ne connaît pas, devrait pouvoir se connecter pour commenter, sans avoir besoin de s'inscrire sur le site WP.
Une personne connectée à l'ensemble du site Web doit également être automatiquement connectée à WordPress.
Je pense que ce qui suit est la voie à suivre.
Pour (1) - y a-t-il un crochet d'enregistrement que je peux utiliser?
Pour (2) - je suppose que je raccroche le filtre d'authentification - c'est-à-dire que lorsque quelqu'un essaie de se connecter, je le piège, passe un appel au système externe, puis traite l'identifiant WP ou le redirige au processus d’enregistrement où (1) prend l’ordre.
Pour (3) - lisez le cookie de connexion défini par le site principal et passez à (2)?
Je suppose que je devrai également insérer un enregistrement dans la table users et usermeta.
Donc, ce qui précède a-t-il un sens - n'ai-je pas pensé à quelque chose? N'importe qui a de bonnes ressources pour aider avec ça (@hakre - j'ai vu que vous aviez fait du travail là-dessus !!).
Donc, je cogne encore un peu la tête contre cela, essentiellement, j'essaie de me connecter au filtre d'authentification et de l'utiliser pour:
wp_signon()
, à l'aide des informations contenues dans le site principal cookie (adresse électronique et mot de passe haché) en tant qu'informations d'identification pour WPEn gros, je veux cacher le formulaire de connexion WP entièrement aux utilisateurs qui vont simplement commenter, et plus tard, trouver un moyen d'autoriser les auteurs et l'administrateur à y accéder directement.
Cela va assez lentement, voici ce que je pourrais utiliser une aide avec:
le filtre d'authentification est-il le bon à utiliser? Il ne semble pas être appelé dans toutes les situations auxquelles je m'attendais - par exemple, le méta-widget affiche les liens de connexion/déconnexion sans le déclenchement de hook authentifié
je peux obtenir que wp_signon()
renvoie un objet WP_User
(indiquant le succès), mais cela n’affecte pas l’état de la connexion; c’est-à-dire que le widget méta serait toujours affiché "Connexion", même après actualisation.
Toute aide reçue avec gratitude :)
OK, l'approche qui fonctionne pour moi est la suivante:
Supposons que la base de données d'utilisateurs du site principal fasse autorité. Le cookie de connexion au site principal contient un identifiant et un hachage du mot de passe du site.
Récupérez le cookie sur le site principal et revalidez-le par rapport à l'API d'authentification du site principal.
S'il est valide, utilisez l'adresse électronique de la valeur renvoyée en tant que valeur 'user_login'
pour WP et le mot de passe de site haché en tant que mot de passe WP.
Testez si cet utilisateur existe dans WP à l'aide de wp_authenticate('user_login', 'user_pass')
. Cela retourne un objet WP_User
en cas de succès, ou un objet WP_Error
en cas d'échec.
Si WP_Error/is_wp_error()
, utilisez ensuite wp_update_user()
pour créer un utilisateur (ou mettez à jour un utilisateur avec un mot de passe modifié).
Connexion via wp_set_current_user()
, wp_set_auth_cookie()
et do_action('wp_login, id)
(Tout cela est contenu dans une fonction attachée à l'action 'init'
)
Cela semble fonctionner: des utilisateurs de site valides inconnus de WP sont automatiquement créés. Les modifications de mot de passe sont prises en compte et si le cookie de site est défini et que l'utilisateur WP existe, le SSO est automatique et relativement transparent.
L'ensemble du système d'authentification est enfichable. Je suggère de regarder les plugins existants pour avoir une idée de la façon de remplacer le système. Peut-être en regardant quelques plugins LDAP ?
L'activation de l'authentification unique dans WordPress m'a pris plus de 18 heures de lutte, mais pourrait ne vous prendre que quelques minutes:
En gros, vous voudrez utiliser https://wordpress.org/plugins/wp-force-login/ et une version modifiée de https://as.wordpress.org/plugins/jwt-authenticator/ puis créez un point de terminaison protégé par une autorisation sur votre site principal, qui génère un JWT (jeton Web JSON) et redirige vers l'URL spéciale de votre site WordPress.
Voir code complet ici .
Plusieurs fonctions liées à l'utilisateur sont définies conditionnellement sur !function_exists()
dans wp-includes/pluggable.php
et sont faciles à remplacer par vos propres versions.