Estou prestes a começar a trabalhar em um protótipo para um cliente - e um dos recursos necessários é a integração com um sistema interno de autenticação / registro de usuários.
Este sistema atuará como o banco de dados oficial do usuário e fornece uma interface RESTful para criar novos usuários e autenticar usuários válidos.
Eu preciso ser capaz de criar novos usuários no WP e, como parte desse processo, fazer uma chamada para a API de autenticação externa para criar / validar esse usuário.
Uma pessoa que é um usuário válido, mas não conhece o WP, deve poder fazer login para comentar, sem precisar se registrar no site do WP.
Uma pessoa logada no site em geral também deve fazer login automaticamente no WordPress.
Eu estou pensando o seguinte é o caminho a percorrer.
Para (1) - existe um gancho de registro que eu possa usar?
Para (2) - suponho que eu conecte o filtro de autenticação - ou seja, quando alguém tenta fazer login, intercepto isso, faço uma chamada para o sistema externo e, em seguida, processamos o login do WP ou os redirecionamos para o processo de registro em que ( 1) leva oer.
Para (3) - leia o cookie de login definido pelo site principal e prossiga com (2)?
Acho que também vou precisar inserir um registro nos usuários e na tabela usermeta.
Então, o que foi dito acima faz sentido - não pensei em algo. Alguém tem bons recursos para ajudar com isso (@hakre - vi que você fez algum trabalho nisso !!).
Atualizar
Então, ainda estou pensando um pouco sobre isso, basicamente estou tentando conectar o filtro de autenticação e usá-lo para:
- verifique se um cookie de logon para o site 'mestre' está definido e, se for, revalidar a API de autenticação e, se for válido, force um logon WP
wp_signon()
usando as informações contidas no cookie do site mestre (email e senha com hash) como credenciais para o WP - se o cookie não estiver definido, redirecione para a página de login do site principal e obtenha um login / inscrição e volte para a etapa 1
- se não houver um usuário WP quando existir um usuário autenticado do site mestre, crie-o e faça um logon 'transparente' (ou seja, para que o usuário não veja um formulário de login do WP)
Basicamente, quero ocultar totalmente o formulário de login do WP para usuários que estão apenas comentando, e mais tarde encontrar uma maneira de permitir que autores e administradores acessem diretamente.
Está indo bem devagar, aqui está o que eu poderia usar para ajudar:
o filtro de autenticação é o correto para usar? Ele não parece ser chamado em todas as situações que eu esperaria - por exemplo, o meta widget exibe links de logon / logout sem o disparo de gancho autenticado
posso
wp_signon()
retornar umWP_User
objeto (indicando sucesso), mas isso não afeta o status de logon - ou seja, o meta widget ainda seria exibido em "Login", mesmo após a atualização.
Qualquer ajuda recebida com gratidão :)
Respostas:
OK, a abordagem que está funcionando para mim é a seguinte:
Suponha que o banco de dados do usuário principal do site seja autoritário. O cookie de login do site principal contém um ID e um hash da senha do site.
Obtenha o cookie do site principal e revalide-o na API de autenticação do site principal
Se válido, use o endereço de email do valor retornado como o
'user_login'
valor para WP e a senha do site com hash como a senha WP.Teste se este usuário existe no WP usando
wp_authenticate('user_login', 'user_pass')
. Isso retorna umWP_User
objeto em caso de sucesso ou umWP_Error
objeto em falha.Se
WP_Error/is_wp_error()
, use usewp_update_user()
para criar um usuário (ou atualizar um usuário com uma senha alterada).Entrada via
wp_set_current_user()
,wp_set_auth_cookie()
edo_action('wp_login, id)
(Tudo isso está contido em uma função anexada à
'init'
ação)Isso parece estar funcionando - usuários do site válidos desconhecidos pelo WP são criados automaticamente. As alterações de senha são atendidas e, se o cookie do site estiver definido e o usuário do WP existir, o SSO será automático e bastante uniforme.
fonte
Todo o sistema de autenticação é conectável. Eu sugiro olhar os plugins existentes para ter uma idéia de como substituir o sistema. Talvez por olhar para alguns plugins LDAP ?
fonte
Várias funções relacionadas ao usuário são definidos condicionalmente em
!function_exists()
emwp-includes/pluggable.php
e são fáceis de substituir com suas próprias versões.fonte
A ativação do logon único no WordPress levou mais de 18 horas de luta, mas pode levar apenas alguns minutos:
Basicamente, você desejará usar https://wordpress.org/plugins/wp-force-login/ e uma versão modificada de https://as.wordpress.org/plugins/jwt-authenticator/ e criar uma autenticação endpoint protegido em seu site principal que gera um JWT (JSON Web Token) e redireciona de volta para o URL especial do seu site WordPress.
Veja o código completo aqui .
fonte