Je suis sur le point de commencer à travailler sur un prototype pour un client - et l'une des fonctionnalités requises est l'intégration avec un système interne d'authentification / d'enregistrement des utilisateurs.
Ce système fera office de base de données d'utilisateurs faisant autorité et fournit une interface RESTful pour créer de nouveaux utilisateurs et authentifier des utilisateurs valides.
J'ai besoin de pouvoir créer de nouveaux utilisateurs dans WP et dans le cadre de ce processus, faire un appel à l'API d'authentification externe pour créer / valider cet utilisateur.
Une personne qui est un utilisateur valide mais non connu de WP devrait pouvoir se connecter pour commenter, sans avoir besoin de s'inscrire sur le site WP lui-même.
Une personne connectée au site Web global doit également être automatiquement connectée à WordPress.
Je pense que ce qui suit est la voie à suivre.
Pour (1) - existe-t-il un crochet d'enregistrement que je peux utiliser?
Pour (2) - Je suppose que je raccorde le filtre d'authentification - c'est-à-dire lorsque quelqu'un essaie de se connecter, je le piège, j'appelle le système externe, puis je traite la connexion WP ou je le redirige vers le processus d'enregistrement où ( 1) prend oer.
Pour (3) - lire le cookie de connexion défini par le site principal et continuer avec (2)?
Je suppose que je vais également avoir besoin d'insérer un enregistrement dans la table des utilisateurs et usermeta.
Alors, est-ce que ce qui précède a du sens - n'ai-je pas pensé à quelque chose. Tout le monde a de bonnes ressources pour aider avec cela (@hakre - j'ai vu que vous avez fait du travail là-dessus !!).
Mise à jour
Donc, je dénonce toujours un peu ma tête contre cela, j'essaie essentiellement de me connecter au filtre d'authentification et de l'utiliser pour:
- vérifier si un cookie de connexion pour le site `` maître '' est défini, et s'il l'est, revalider par rapport à leur API d'authentification, et s'il est valide, forcer une connexion WP avec
wp_signon()
, en utilisant les informations contenues dans le cookie du site maître (email et mot de passe haché) comme informations d'identification pour WP - si le cookie n'est pas défini, redirigez-vous vers la page de connexion du site maître et obtenez une connexion / inscription, puis revenez à l'étape 1
- s'il n'y a pas d'utilisateur WP lorsqu'il existe un utilisateur de site maître authentifié, créez-le, puis un code d'accès «transparent» (c'est-à-dire que l'utilisateur ne voit pas de formulaire de connexion WP)
Fondamentalement, je souhaite masquer le formulaire de connexion WP entièrement pour les utilisateurs qui vont simplement commenter, et trouver plus tard un moyen d'autoriser les auteurs et les administrateurs à y accéder directement.
Ça va assez lentement, voici ce que je pourrais utiliser avec de l'aide:
le filtre d'authentification est-il le bon à utiliser? Il ne semble pas être appelé dans toutes les situations auxquelles je m'attendrais - par exemple, le méta-widget affiche les liens de connexion / déconnexion sans le déclenchement du crochet d'authentification
je peux obtenir
wp_signon()
pour renvoyer unWP_User
objet (indiquant le succès), mais cela n'affecte pas le statut connecté - c'est-à-dire que le méta-widget serait toujours affiché dans "Login" même après rafraîchissement.
Toute aide reçue avec gratitude :)
Réponses:
OK, l'approche qui fonctionne pour moi est la suivante:
Supposons que la base de données des 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.
Obtenez le cookie du site principal et revalidez-le contre l'API d'authentification du site principal
Si elle est valide, utilisez l'adresse e-mail de la valeur de retour comme
'user_login'
valeur pour WP et le mot de passe du site haché comme mot de passe WP.Testez si cet utilisateur existe dans WP en utilisant
wp_authenticate('user_login', 'user_pass')
. Cela renvoie unWP_User
objet en cas de succès ou unWP_Error
objet en cas d'échec.Si
WP_Error/is_wp_error()
, utilisez alors usewp_update_user()
pour créer un utilisateur (ou mettez à jour un utilisateur avec un mot de passe modifié).Connectez - vous via
wp_set_current_user()
,wp_set_auth_cookie()
etdo_action('wp_login, id)
(Tout cela est contenu dans une fonction attachée à l'
'init'
action)Cela semble fonctionner - des utilisateurs valides du site inconnus de WP sont automatiquement créés. Les changements de mot de passe sont pris en charge, et si le cookie du site est défini et que l'utilisateur WP existe, le SSO est automatique et assez transparent.
la source
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 certains plugins LDAP ?
la source
Plusieurs fonctions liées à l'utilisateur sont définies sous condition
!function_exists()
danswp-includes/pluggable.php
et sont faciles à remplacer avec vos propres versions.la source
L'activation de l'authentification unique dans WordPress m'a pris plus de 18 heures de lutte, mais pourrait ne prendre que quelques minutes:
Fondamentalement, vous souhaiterez utiliser https://wordpress.org/plugins/wp-force-login/ et une version modifiée de https://as.wordpress.org/plugins/jwt-authenticator/ , puis créer une authentification sur votre site principal qui génère un JWT (JSON Web Token) et redirige vers l'URL spéciale de votre site WordPress.
Voir le code complet ici .
la source