Estoy a punto de comenzar a trabajar en un prototipo para un cliente, y una de las características requeridas es la integración con un sistema interno de autenticación / registro de usuarios.
Este sistema actuará como la base de datos de usuarios autorizados y proporciona una interfaz RESTful para crear nuevos usuarios y autenticar usuarios válidos.
Necesito poder crear nuevos usuarios en WP y, como parte de ese proceso, hacer una llamada a la API de autenticación externa para crear / validar a ese usuario.
Una persona que sea un usuario válido pero que WP no conozca debería poder iniciar sesión para comentar, sin necesidad de registrarse en el sitio de WP.
Una persona que inició sesión en el sitio web en general también debería iniciar sesión automáticamente en WordPress.
Estoy pensando que el siguiente es el camino a seguir.
Para (1): ¿hay un gancho de registro que pueda usar?
Para (2): supongo que engancho el filtro de autenticación, es decir, cuando alguien intenta iniciar sesión, lo atrapo, hago una llamada al sistema externo y luego proceso el inicio de sesión de WP o los redirijo al proceso de registro donde ( 1) toma oer.
Para (3): lea la cookie de inicio de sesión establecida por el sitio principal y continúe con (2).
Supongo que también necesitaré insertar un registro en los usuarios y la tabla de usuario.
Entonces, ¿tiene sentido lo anterior? ¿No he pensado en algo? Cualquiera tiene buenos recursos para ayudar con esto (@hakre - ¡¡Vi que has trabajado en esto !!).
Actualizar
Así que todavía estoy golpeando mi cabeza contra esto un poco, esencialmente estoy tratando de conectarme al filtro de autenticación, y lo uso para:
- compruebe si está configurada una cookie de inicio de sesión para el sitio 'maestro' y, en caso afirmativo, vuelva a validar contra su API de autenticación y, si es válida, fuerce un inicio de sesión de WP con
wp_signon()
la información contenida en la cookie del sitio maestro (correo electrónico y contraseña hash) como credenciales para WP - si la cookie no está configurada, redirija a la página de inicio de sesión del sitio maestro y obtenga un inicio de sesión / registro y luego regrese al paso 1
- si no hay un usuario de WP cuando existe un usuario del sitio maestro autenticado, créelo y luego un inicio de sesión 'transparente' (es decir, para que el usuario no vea un formulario de inicio de sesión de WP)
Básicamente, quiero ocultar el formulario de inicio de sesión de WP completamente para los usuarios que solo van a comentar principalmente, y luego encontrar una manera de permitir que los autores y el administrador accedan directamente.
Va bastante lento, esto es con lo que podría necesitar ayuda:
¿Es el filtro de autenticación el correcto para usar? No parece que lo llamen en todas las situaciones que esperaría, por ejemplo, el widget de meta muestra enlaces de inicio / cierre de sesión sin la activación del enlace de autenticación
puedo
wp_signon()
devolver unWP_User
objeto (lo que indica éxito), pero no afecta el estado de inicio de sesión, es decir, el widget de meta aún se mostrará en "Iniciar sesión" incluso después de actualizar.
Cualquier ayuda recibida con gratitud :)
Respuestas:
OK, el enfoque que funciona para mí es el siguiente:
Suponga que la base de datos de usuarios del sitio principal es autorizada. La cookie de inicio de sesión del sitio principal contiene un ID y un hash de la contraseña del sitio.
Obtenga la cookie del sitio principal y vuelva a validarla contra la API de autenticación del sitio principal
Si es válido, use la dirección de correo electrónico del valor de retorno como
'user_login'
valor para WP y la contraseña del sitio con hash como contraseña de WP.Pruebe si este usuario existe en WP mediante
wp_authenticate('user_login', 'user_pass')
. Esto devuelve unWP_User
objeto en caso de éxito o unWP_Error
objeto en caso de error.Si
WP_Error/is_wp_error()
, use usewp_update_user()
para crear un usuario (o actualizar un usuario con una contraseña modificada).Entrar a través de
wp_set_current_user()
,wp_set_auth_cookie()
ydo_action('wp_login, id)
(Todo esto está contenido en una función asociada a la
'init'
acción)Esto parece estar funcionando: los usuarios válidos del sitio desconocidos para WP se crean automáticamente. Se atienden los cambios de contraseña, y si la cookie del sitio está configurada y el usuario de WP existe, el SSO es automático y bastante perfecto.
fuente
Todo el sistema de autenticación es conectable. Sugiero mirar los complementos existentes para tener una idea de cómo anular el sistema. ¿Quizás mirando algunos complementos LDAP ?
fuente
Varias funciones relacionadas con el usuario se definen condicionalmente
!function_exists()
enwp-includes/pluggable.php
y son fáciles de anular con sus propias versiones.fuente
Habilitar el inicio de sesión único en WordPress me llevó más de 18 horas de lucha, pero podría llevarle solo unos minutos:
Básicamente, querrá usar https://wordpress.org/plugins/wp-force-login/ y una versión modificada de https://as.wordpress.org/plugins/jwt-authenticator/ y luego crear una autenticación protegido en su sitio principal que genera un JWT (JSON Web Token) y redirige a la URL especial de su sitio de WordPress.
Ver código completo aquí .
fuente