嘿,友好的 Discourse 朋友们,
我使用了 discourse-oauth2-basic 来让我们的成员登录,并从他们的 Office365 组织账户中自动填充邮箱、全名和用户名。但我一直无法成功填充头像,想知道是否有人在这方面取得过成功?
这里的 Graph 指南 表明头像的 URL 应该位于 photo/$value;我已经尝试过这个路径,但并未返回任何内容,而且在日志中也看不到任何错误。
我当前的设置如下:
……我还尝试在 oauth2 callback user info paths 和 oauth2 authorize options 字段中添加 ‘photo’,但同样没有效果。非常感谢您的任何帮助 
1 个赞
david
(David Taylor)
2
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 个赞