使用 Microsoft Graph Oauth2 填充用户头像

嘿,友好的 Discourse 朋友们,

我使用了 discourse-oauth2-basic 来让我们的成员登录,并从他们的 Office365 组织账户中自动填充邮箱、全名和用户名。但我一直无法成功填充头像,想知道是否有人在这方面取得过成功?

这里的 Graph 指南 表明头像的 URL 应该位于 photo/$value;我已经尝试过这个路径,但并未返回任何内容,而且在日志中也看不到任何错误。

我当前的设置如下:

……我还尝试在 oauth2 callback user info pathsoauth2 authorize options 字段中添加 ‘photo’,但同样没有效果。非常感谢您的任何帮助 :wink:

1 个赞

OAuth2 插件仅允许从单个端点(即 oauth2 user json url)请求数据。所有 json *** path 设置均指 JSON 数据内部的位置,而非独立的 API 端点。

快速查阅 graph.microsoft.com API 文档 后发现,/me 端点默认并不包含头像 URL。即使您能够 获取 profilePhoto 资源,返回的似乎也是“照片 ID”而非 URL。

因此,很遗憾,我认为您需要开发一个自定义的身份验证插件才能实现此功能:cry:。不过,我很乐意看到我的观点被证明是错误的!

2 个赞

谢谢你的反馈,@david。这促使我尝试将其“获取”到用户 JSON 中。看起来 OData 扩展查询参数 对照片并不支持——不过,如果你在 URL 末尾附加 /$value,它确实会以 URL 形式返回:

……你无法在 user/photo 关系上使用 $expand

我没能找到逆转这一限制的方法;因此,与其尝试将 https://graph.microsoft.com/beta/me?$expand=photo 改为类似 https://graph.microsoft.com/beta/me/photo/$value?$expand=mail,displayName 的形式,不如直接放弃(真是让人抓狂,忍不住要吐槽)。

或许我们可以利用 JSON 数据中的 mail 字段来构建照片的 URL,其格式始终如下:

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

那么,我们能否用正确的语法将字段中的三个部分拼接起来?我刚才的笨拙尝试显然没成功:

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

……或者还有别的办法?我显然是在瞎抓救命稻草了——另一种思路是在 oauth2 用户 JSON 的 url 字段中添加照片端点,例如:

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

1 个赞