Poblando avatares de usuario con Microsoft Graph Oauth2

¡Hola, amables usuarios de Discourse!

He utilizado discourse-oauth2-basic para permitir que nuestros miembros inicien sesión y que se autocompleten automáticamente sus valores de correo electrónico, nombre completo y nombre de usuario desde su cuenta organizativa de Office365. Sin embargo, estoy teniendo dificultades para que se cargue el avatar y me preguntaba si alguien ha tenido éxito al hacerlo.

Las directrices de Graph aquí sugieren que la URL del avatar debería estar disponible en photo/$value; la he incluido, pero no se devuelve y no veo ningún error en los registros.

Mis configuraciones actuales son:

…también he probado a añadir ‘photo’ en los campos oauth2 callback user info paths y oauth2 authorize options, pero sin éxito. Cualquier ayuda será muy apreciada :wink:

1 me gusta

El plugin OAuth2 solo permite solicitar datos desde un único punto final (la oauth2 user json url). Todas las configuraciones de json *** path se refieren a ubicaciones dentro de los datos JSON, no a puntos finales de API separados.

Al echar un vistazo rápido a la documentación de la API de graph.microsoft.com, parece que el punto final /me no incluye la URL del avatar de forma predeterminada. Incluso si pudieras obtener el recurso profilePhoto, parece que devuelve un “ID de foto” en lugar de una URL.

Por lo tanto, lamentablemente creo que necesitarías desarrollar un plugin de autenticación personalizado para que esto funcione :cry:. ¡Me encantaría que me demostraran lo contrario!

2 Me gusta

Gracias por revisarlo, @david. Me animó a ver si podía ‘obtenerlo’ en el JSON del usuario. Parece que el parámetro de consulta expandir de OData no es compatible con la foto, aunque esta sí se recibe como una URL si le añades /$value:

…no puedes usar $expand en la relación user/photo.

No pude encontrar una forma de revertir eso; así que, en lugar de https://graph.microsoft.com/beta/me?$expand=photo, algo como https://graph.microsoft.com/beta/me/photo/$value?$expand=mail,displayName. ¡Argh, rabia, quejas!

Quizás podríamos usar la ubicación ‘mail’ en los datos JSON para construir la URL de la foto, que es consistentemente:

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

…¿podríamos concatenar los tres elementos del campo con la sintaxis correcta? Mi intento de tonto aquí no funcionó, como era de esperar:

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

…o tal vez otra forma, ya que claramente estoy agarrándome a pajas, sería añadir el punto final de la foto al campo URL de json de oauth2 del usuario con algo como:

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

1 me gusta