Entrar com Apple

Os problemas 1 e 2 são causados por uma escolha deliberada de implementação da Apple. Portanto, não se trata realmente de um incidente técnico, e podemos contorná-los. O problema 3 está relacionado ao gem omniauth-apple, então podemos corrigi-lo.

O que precisamos da Apple é que ela inclua o nome/e-mail nos fluxos de autenticação subsequentes. Infelizmente, eles reconheceram o comportamento e afirmaram que funciona conforme projetado: https://forums.developer.apple.com/thread/121496

Isso se comporta corretamente: as informações do usuário são enviadas apenas no ASAuthorizationAppleIDCredential durante o primeiro cadastro do usuário. Logins subsequentes no seu aplicativo usando o “Entrar com Apple” com a mesma conta não compartilham nenhuma informação do usuário e retornarão apenas um identificador de usuário no ASAuthorizationAppleIDCredential. Recomenda-se que você armazene com segurança o ASAuthorizationAppleIDCredential inicial contendo as informações do usuário até que possa validar que uma conta foi criada com sucesso no seu servidor.

Mas fiquei curioso: alguém já viu outros sites usando o “Entrar com Apple”? Acredito ter visto apenas aplicativos nativos utilizando essa funcionalidade :thinking:

3 curtidas

Essa funcionalidade faz muito sentido para mim, já que nosso aplicativo iOS se conecta ao nosso site Discourse e o aplicativo não exige login para outros recursos.
É muito conveniente para os usuários fazer login por esse método, pois a maioria já está logada no dispositivo e o Apple Pay, usado para compras dentro do aplicativo, utiliza a mesma conta.

Na minha opinião, ainda faria sentido entrar em contato com o DTS da Apple sobre isso para ver o que eles sugerem como solução alternativa e também para dar a eles o feedback de que isso está causando problemas. (Infelizmente, não tenho conhecimento suficiente sobre o assunto para ter essa conversa com eles.)

Está longe de ser tão disseminado quanto Google/FB/etc, mas já vi em alguns lugares, como ebay.com, wordpress.com e kayak.com.

3 curtidas

Eles podem usar uma API diferente, no entanto. Existe um script JS que você pode adicionar, mas suspeito que ele não se integre ao sistema OAuth mais genérico do Discourse:

Vamos pegar o Kayak.com como exemplo.

Se eu fizer uma pequena investigação no inspetor do navegador, encontro isso:

image

1 curtida

Eles estão usando a biblioteca JavaScript da Apple, sim. Mas ainda está usando a mesma API ‘OAuth’ (mas não realmente OAuth) nos bastidores.

O eBay nem sequer está tentando buscar as informações do usuário. Após fazer login com a Apple, você é solicitado a fornecer seu e-mail:

Suspeito que o Kayak e o WordPress estejam armazenando em cache as informações do usuário da primeira tentativa de autenticação, conforme a recomendação da Apple.

Acho que essa provavelmente será a abordagem que precisaremos adotar, mas não é particularmente robusta (por exemplo, se a conexão com a rede for interrompida durante a primeira tentativa, ou se o Discourse for restaurado a partir de um backup, ou se o usuário alterar seu endereço de e-mail da Apple). E, na minha opinião, é ligeiramente pior do ponto de vista da privacidade (precisamos armazenar e-mails para usuários que ainda nem se cadastraram!)

6 curtidas

Acho que todas as últimas mudanças do iOS da Apple tornam isso viável agora, não é?

3 curtidas

Algo mudou recentemente relacionado ao ‘Entrar com Apple’?

Podemos certamente fazê-lo funcionar como está — será necessário alguns dias para contornar esses problemas. Mas, mesmo assim, continuaremos recebendo apenas e-mail e nome no primeiro login de todos.

5 curtidas

Acho que eles refinaram um pouco, mas não consigo encontrar facilmente mudanças específicas.

Acho que receber um e-mail apenas uma vez não é um grande problema? Acredito que precisamos testar o que acontece quando você altera seu e-mail no e-mail da sua Apple ID?

3 curtidas

Devemos continuar recebendo o mesmo UID, mas não receberemos o novo e-mail. O usuário terá que atualizá-lo manualmente no Discourse.

3 curtidas

Acho que devemos dar uma conferida nisso, mas, honestamente, não vejo isso como um grande drama que nos impeça de implementar essa funcionalidade.

O fluxo de login em dispositivos iOS é simplesmente incrível com o login pela Apple, além de oferecer autenticação de dois fatores com Face ID.

5 curtidas

:+1: vou adicionar à minha lista para deixar o plugin atualizado para que possamos testar. Se funcionar bem, podemos movê-lo para o núcleo com bastante facilidade.

13 curtidas

Já passei o repositório para o David, que o moveu para o Discourse :slight_smile:

Obrigado por assumir isso.

11 curtidas

Li este tópico 2 ou 3 vezes, mas não me lembro se vocês tentaram obter o e-mail a partir do token JWT fornecido.

É assim que eu faço no código nativo. Não tenho certeza se a API da web permite isso.

No primeiro login, você pode obter o e-mail diretamente em ASAuthorizationAppleIDCredential.email.
Para logins subsequentes, o e-mail pode ser encontrado se você decodificar os dados do JWT e obter o campo “email”.

Com isso, a funcionalidade pode ser implementada, certo?
O e-mail fornecido será aquele escolhido pelo usuário, pessoal ou aleatório.

Sim, isso está correto.

Essa não tem sido a minha experiência, não. Na última vez que verifiquei, o JWT não continha o e-mail em logins subsequentes.

Independentemente disso, temos a intenção de fazer isso funcionar em breve e atualizarei este tópico quando estiver pronto :slight_smile:

4 curtidas

É tão estranho, porque no nativo consegui fazer funcionar apenas usando a propriedade de e-mail do JWT.

Se não atualizarem a versão web para ser semelhante, a única solução pode ser gerar automaticamente um e-mail fictício (confirmado automaticamente) e permitir que o usuário altere depois, se quiser.

Isso significaria confiar no ID fornecido pela Apple, o que não é uma solução tão ruim, mas tem um certo cheiro :slight_smile:.

4 curtidas

É bem possível que tenham melhorado as coisas — vou dar uma conferida de novo :+1:

6 curtidas

Sabemos que conseguimos fazer isso funcionar. O que se torna complicado é:

  • Seu e-mail do Apple ID é jane.champion@somewhere.com

  • Você se cadastra no Discourse usando o Apple

  • Você altera seu e-mail do Apple ID para jane.row@somewhere.com

  • Você faz login no Discourse… e ainda acreditamos que você é jane.champion@somewhere.com

  • Suas notificações por e-mail no Discourse agora serão rejeitadas indefinidamente.

Não temos clareza sobre qual processo está em vigor quando os e-mails do Apple ID mudam e como podemos reagir a isso, se for possível.

Minha conclusão sobre isso é que… simplesmente convivemos com esse caso de borda e, pelo menos, os usuários podem optar por alterar seus e-mails no Discourse para casos de borda como este.

3 curtidas

Testei hoje e a boa notícia é que parece que a Apple corrigiu o problema :smiley: Estou vendo o endereço de e-mail presente em cada autenticação.

Ainda tenho alguns problemas para resolver, mas espero ter algo público ainda esta semana.

13 curtidas

Eu diria que isso é certamente um candidato para ser incluído no Discourse. Devemos visar incorporar o código ao núcleo ou, pelo menos, empacotar o plugin para a próxima versão principal. (com certeza não a da próxima semana, hein :slight_smile: )

13 curtidas

Sim, podemos mover isso de plugin para o núcleo mais tarde com pouco esforço. Um problema é que é super difícil de configurar em comparação com Google, Facebook, etc.

Você precisa de uma conta de desenvolvedor da Apple (paga?) e tem que configurar vários tipos de verificação de domínio e certificados. Com um bom tutorial, certamente é viável.

13 curtidas