DfSocialConnect SW: guia completo
Instalar, configurar e explorar o DfSocialConnect: início de sessão com Google, Apple e Facebook com painel analítico integrado, configuração por canal de venda e ligação automática das contas para Shopware 6.6 e 6.7.
O DfSocialConnect acrescenta ao Shopware 6 o início de sessão social com Google, Apple e Facebook, com um painel analítico completo integrado na administração. A extensão foi deliberadamente construída sem biblioteca JWT externa: a assinatura ES256 do client_secret da Apple é gerada nativamente em PHP através do openssl. Uma única base de código cobre o Shopware 6.6 e 6.7, sem build de storefront nem administração à medida impostos. Este guia cobre a instalação, a configuração por canal de venda de cada fornecedor, a apresentação dos botões, o painel, a ligação automática das contas, a segurança e a resolução de problemas.
O Apple Sign In exige uma configuração séria do lado do Apple Developer (Services ID, Team ID, Key ID, chave .p8) e um domínio HTTPS válido. Sem estes elementos, só o Google e o Facebook ficarão operacionais. O módulo funciona igualmente bem com um único fornecedor ativo.
Pré-requisitos
- Shopware 6.6.x ou 6.7.x (a 6.5 não é suportada, a extensão usa o
AccountService::loginByIdintroduzido na 6.6). - PHP 8.2 ou mais recente, com a extensão
openssl(usada para a assinatura ES256 e o HMAC do cookie de state). - Um URL HTTPS válido para a sua loja: todos os fornecedores OAuth recusam URIs de redirecionamento em HTTP em produção.
Instalação
- Transfira o
DfSocialConnect-v1.0.1.zipa partir da sua conta DataFirefly. - Instale o ZIP em Administração → Extensões → As minhas extensões → Carregar extensão, ou copie a pasta descomprimida
DfSocialConnectparacustom/plugins/. - Ative a extensão e atualize as caches:
bin/console plugin:refresh bin/console plugin:install --activate DfSocialConnect bin/console cache:clear - Na instalação, a extensão cria duas tabelas:
df_social_account(identidades sociais ligadas aos clientes) edf_social_log(registo de eventos para o painel). Na desinstalação sem conservação dos dados, estas duas tabelas são eliminadas.
No Shopware 6.7, a nova administração Meteor carrega automaticamente os módulos das extensões sem build de administração. Na 6.6, se o menu «Social Connect» em Clientes não aparecer depois da instalação, execute bin/console administration:build e limpe as caches do navegador.
Configuração geral
Abra Extensões → As minhas extensões → DataFirefly Social Connect → ⋯ → Configurar. Todas as opções podem ter âmbito por canal de venda através do seletor nativo no topo da página: selecione um canal para lhe atribuir valores específicos, ou deixe «Todos os canais de venda» para valores comuns.
O cartão Geral contém:
- Estilo dos botões: «cor cheia» (por predefinição, nas cores oficiais), «contorno» (variante sóbria para temas minimalistas) ou «apenas ícone» (muito compacto, ideal em telemóvel).
- Ligar automaticamente por email verificado: se o fornecedor certificar o email e existir um cliente com esse endereço, a identidade social é associada a essa conta em vez de criar um duplicado. Ativo por predefinição.
- Ignorar o duplo opt-in: como os emails fornecidos pelo Google, pela Apple ou pelo Facebook já estão verificados, o duplo opt-in é contornado por predefinição.
- Newsletter no registo: acrescenta um sinal de opt-in de newsletter nas contas criadas por início de sessão social.
- Tentativas por hora (por IP): limiar de rate limiting do fluxo de autenticação. Predefinição 30; aumente se tiver muitos visitantes por trás do mesmo NAT.
Google Connect
- Vá a console.cloud.google.com → APIs e serviços → Credenciais.
- Crie um ID de cliente OAuth 2.0, do tipo Aplicação Web.
- Em URIs de redirecionamento autorizados, acrescente:
https://o-seu-dominio/df-social-connect/callback/googleEm multicanal, acrescente uma linha por domínio de canal de venda.
- Copie o Client ID e o Client Secret para o cartão Google Connect da configuração da extensão, e ative o interruptor Ativar o Google Connect.
O fluxo é OpenID Connect com PKCE S256, o scope pedido é openid email profile, e o nonce do id_token é validado do lado do servidor a cada retorno.
Apple Connect
A Apple é mais exigente na configuração, mas oferece a melhor experiência de utilizador em iOS e macOS.
- Vá a developer.apple.com → Certificates, Identifiers and Profiles.
- Crie um App ID com a capability Sign In with Apple.
- Crie um Services ID (por exemplo
com.a-sua-marca.web) ligado ao App ID. Na sua configuração:- Domains: o seu domínio (sem
https://). - Return URLs:
https://o-seu-dominio/df-social-connect/callback/apple.
- Domains: o seu domínio (sem
- Crie uma Key com o serviço Sign In with Apple, transfira o ficheiro
AuthKey_XXXXX.p8e anote o seu Key ID. - Obtenha o seu Team ID no canto superior direito do portal.
- No cartão Apple Connect da extensão, preencha:
- Services ID (por exemplo
com.a-sua-marca.web), - Team ID,
- Key ID,
- Chave privada: cole o conteúdo completo do
.p8, linhas BEGIN/END incluídas.
Ative o interruptor Ativar o Sign in with Apple.
- Services ID (por exemplo
O client_secret JWT assinado em ES256 é gerado na hora a cada pedido a partir da chave .p8, sem cache: não há rotação a gerir.
A armadilha do callback Apple form_post. Quando se pede o scope name email, a Apple devolve o callback em POST cross-site, o que impede o cookie de sessão SameSite Lax de ser devolvido. A maioria das integrações parte-se nesse momento. O DfSocialConnect coloca em paralelo um cookie de state assinado com HMAC em SameSite None, e revalida através desse cookie quando a sessão não está disponível. Não é necessária qualquer configuração da sua parte, mas isso pressupõe que a sua loja é servida em HTTPS estrito (os cookies SameSite=None exigem Secure).
Facebook Connect
- Vá a developers.facebook.com → As minhas aplicações e crie uma App do tipo Consumer.
- Acrescente o produto Facebook Login → Settings.
- Em Valid OAuth Redirect URIs, acrescente:
https://o-seu-dominio/df-social-connect/callback/facebook - Obtenha o App ID e o App Secret em Settings → Basic, e cole-os no cartão Facebook Connect da extensão. Ative o interruptor.
O módulo chama a Graph API v21.0 com appsecret_proof obrigatório (assinatura HMAC-SHA256 do token com o seu App Secret), o que o Facebook recomenda para qualquer aplicação em produção.
Apresentação dos botões no storefront
Assim que pelo menos um fornecedor está ativo e configurado, os botões aparecem automaticamente:
- na página /account/login, logo abaixo do formulário de início de sessão, precedidos do separador «ou continuar com»;
- na página /account/register, no mesmo sítio;
- na página de perfil do cliente (
/account/profile), um bloco Inícios de sessão sociais lista as identidades já ligadas com um botão Desassociar por identidade, e propõe em complemento os fornecedores ainda disponíveis.
Não é necessária qualquer sobreposição de tema. Os templates Twig da extensão estendem os blocos page_account_login_login, page_account_register_content e page_account_profile_personal do Shopware. Se o seu tema personalizado já sobrepuser estes blocos e se esquecer de chamar {{ parent() }}, acrescente-o para reintegrar os botões.
Personalizar o estilo
Os botões são estilizados em Resources/app/storefront/src/scss/base.scss. São fornecidas três variantes de base (--default, --outline, --icon); para ir mais longe, sobreponha as classes .df-social-connect__btn--google, --apple e --facebook no seu tema.
Painel analítico
A administração expõe um módulo dedicado em Clientes → Social Connect. Quatro cartões filtráveis por período (7, 30 ou 90 dias) e por canal de venda:
- Visão geral: inícios de sessão, registos, contas ligadas, taxa de sucesso global, erros.
- Por fornecedor: barras de progresso nas cores oficiais de cada marca.
- Tendência diária: curva de várias séries em ApexCharts (uma linha por fornecedor).
- Atividade recente: os 25 últimos eventos com cliente, fornecedor, tipo de evento e mensagem.
O módulo está protegido por uma ACL de leitura dedicada: df_social_connect.viewer. Para dar acesso ao painel a um papel de utilizador, abra o seu perfil em Definições → Sistema → Utilizadores e permissões, e marque a permissão correspondente na categoria Clientes.
Ligação automática e antiduplicados
A cada início de sessão social, a extensão tenta três resoluções sucessivas:
- Pesquisa direta pelo par (fornecedor,
provider_user_id) emdf_social_account. Encontrado: início de sessão imediato no cliente ligado. - Ligação por email verificado: se o fornecedor marcou o email como verificado e existir um cliente com esse endereço no canal de venda, a identidade social é associada a essa conta. Preserva o histórico de encomendas e o grupo de clientes.
- Criação de conta: só em último recurso, é criado um novo cliente através do
AccountService::loginByIdcom uma palavra-passe aleatória nunca reutilizada, uma saudação neutra e uma morada mínima ligada ao país predefinido do canal de venda.
A ligação automática por email desativa-se por canal de venda na configuração geral, se preferir forçar a criação explícita a cada registo social.
Segurança
- State OAuth assinado com HMAC: proteção CSRF em todos os fluxos.
- PKCE S256 no Google: o
code_verifiernunca sai do servidor. - Nonce OIDC validado do lado do servidor no
id_tokendo Google. - appsecret_proof do Facebook: o token de utilizador não pode ser reproduzido a partir de outro cliente.
- IP em hash: os endereços IP dos eventos são transformados em hash antes de serem guardados em
df_social_log. - Rate limiting por IP, com limiar configurável por hora.
- Sanitização anti open-redirect: os URLs de retorno fornecidos pelo utilizador são verificados contra o domínio do canal de venda antes de qualquer redirecionamento.
Desinstalação
A partir de As minhas extensões, desative e desinstale a extensão. Se a opção Conservar os dados dos utilizadores estiver desativada, as duas tabelas df_social_account e df_social_log são eliminadas. As contas de cliente ficam intactas; apenas as ligações sociais e o registo de eventos são apagados.
FAQ e resolução de problemas
Nenhum botão aparece na página de início de sessão. Verifique que (a) pelo menos um fornecedor tem o interruptor ativo E as credenciais introduzidas na configuração; (b) está mesmo no canal de venda configurado; (c) o tema foi recompilado: bin/console assets:install && bin/console theme:compile && bin/console cache:clear.
A Apple devolve invalid_client. O client_secret JWT falhou do lado da Apple. Verifique o Services ID, o Team ID, o Key ID e que o conteúdo da chave .p8 inclui mesmo as linhas BEGIN e END. Uma hora de servidor desviada também aciona este erro, porque o JWT fica com um iat no futuro.
A Apple devolve um erro de state no retorno. Verifique que a sua loja é servida em HTTPS estrito (sem redirecionamento HTTP → HTTPS no callback) e que os seus cookies de terceiros não são bloqueados por um proxy frontal que reescreva o SameSite=None.
O Facebook devolve Invalid appsecret_proof provided. O App Secret introduzido não corresponde ao App ID. Regenere-o em Settings → Basic da sua App do Facebook e volte a colá-lo.
O painel está vazio apesar de ter havido inícios de sessão. Verifique o filtro de canal de venda no topo do painel: restringe todas as estatísticas. Selecione «Todos os canais de venda» para ver o agregado global.
Um utilizador tem duas contas: uma criada por formulário e outra pelo Google. A ligação automática por email estava desativada, ou o email da conta inicial não era exatamente igual ao devolvido pelo Google. Para fundir, elimine a conta mais recente e peça ao utilizador que volte a iniciar sessão pelo Google: a ligação automática vai associá-lo à conta conservada.
Compatível com o Shopware 6.5? Não. O AccountService::loginById foi introduzido na 6.6; esse mecanismo é central na extensão e não pode ser adaptado à 6.5 de forma limpa.