Populando avatares de usuários com Microsoft Graph Oauth2

Ei, pessoal amigáveis do Discourse,

Usei o discourse-oauth2-basic para permitir que nossos membros façam login e que os valores de e-mail, nome completo e nome de usuário sejam preenchidos automaticamente a partir da conta organizacional do Office365. Estou com dificuldade para popular o avatar, no entanto, e gostaria de saber se alguém teve sucesso ao fazer isso.

A orientação do Graph aqui sugere que a URL do avatar deve estar disponível em photo/$value; que eu inseri, mas ela não está sendo retornada e não consigo ver nenhum erro nos logs.

Minhas configurações atuais são:

…Também tentei adicionar ‘photo’ nos campos oauth2 callback user info paths e oauth2 authorize options, mas sem sucesso. Qualquer ajuda será muito apreciada :wink:

1 curtida

O plugin OAuth2 permite apenas a solicitação de dados de um único endpoint (a oauth2 user json url). Todas as configurações json *** path referem-se a localizações dentro dos dados JSON, não a endpoints de API separados.

Dando uma rápida olhada na documentação da API do graph.microsoft.com, parece que o endpoint /me não inclui a URL do avatar por padrão. Mesmo se você conseguisse buscar o recurso profilePhoto, parece que ele retorna um “ID da foto” em vez de uma URL.

Portanto, infelizmente, acredito que você precisaria desenvolver um plugin de autenticação personalizado para fazer isso funcionar :cry:. Mas adoraria ser contradito!

2 curtidas

Obrigado por verificar isso, @david. Isso me fez pensar se eu poderia ‘buscar’ isso no JSON do usuário. Parece que o parâmetro de consulta de expansão OData não é suportado para a foto, embora ela seja retornada como uma URL se você adicionar /$value a ela:

…você não pode usar $expand na relação user/photo.

Não consegui encontrar uma maneira de inverter isso; então, em vez de https://graph.microsoft.com/beta/me?$expand=photo virar algo como https://graph.microsoft.com/beta/me/photo/$value?$expand=mail,displayName. Suspiro, brinquedos fora do berço, reclamação.

Talvez pudéssemos usar o local ‘mail’ nos dados JSON para construir a URL da foto, que é consistentemente:

https://tenant-my.sharepoint.com/User%20Photos/Profile%20Pictures/adam_pope_arup_com_LThumb.jpg

…então, poderíamos concatenar os três elementos no campo com a sintaxe correta? Minha tentativa desajeitada aqui não funcionou, o que não surpreende:

https://tenant-my.sharepoint.com/User%20Photos/Profile%20Pictures/” & mail & “_LThumb.jpg”

…ou talvez outra maneira — estou claramente me agarrando a palhas aqui — seria adicionar o endpoint da foto ao campo URL do JSON do usuário oauth2 com algo como:

https://graph.microsoft.com/v1.0/me?https://graph.microsoft.com/v1.0/me/photo

1 curtida