azure - 使用 Graph API 更新用户信息
问题描述
这是关于使用 Graph API 更新登录用户的个人资料信息的问题
我正在使用(https://docs.microsoft.com/en-us/graph/tutorials/javascript)上的教程。它让您:
- 登入
- 获取登录用户信息
- 获取日历事件
- 创建日历事件
它工作得很好,看起来很棒。
但是,我很难更新用户信息。我将示例代码剥离为仅获取用户信息,因为我不处理日历事件。
获取访问令牌、创建客户端和获取用户配置文件都可以正常工作:
// Create an authentication provider
const authProvider = {
getAccessToken: async () => {
console.log('authProvider');
return await getToken();
}
};
// Initialize the Graph client
const graphClient = MicrosoftGraph.Client.initWithMiddleware({authProvider});
async function getUser() {
return await graphClient
.api('/me')
// Only get the fields used by the app
.select('id,displayName,userPrincipalName')
.get();
}
我替换了函数 getEvents() 的内容来更新用户。
let user = {
officeLocation: "Home Sweet Home"
}
try {
return await graphClient.api('/me').update(user);
}
catch (error) {
console.log(error);
updatePage(Views.error, {
message: 'Error logging in',
debug: error
});
}
(https://docs.microsoft.com/en-us/graph/api/user-update)
我想更新一些基本的东西,比如用户的 officeLocation,但是它没有用。
我正确地在我的应用程序的权限中提供了适当的权限和范围,如下所示:
我不断收到状态码 405 错误,这意味着不允许使用 HTTP 方法。但是文档特别告诉我要使用更新功能,即 PATCH。
有人可以提供工作代码(和权限/范围属性)来更新用户的属性,以便我知道正确的过程是什么。
谢谢!
9/22 更新:
我还添加了全局管理员角色。不幸的是,我仍然收到 405 Method ErrorMethodNotAllowed 错误。
9/23 更新:
在 ( https://developer.microsoft.com/en-us/graph/graph-explorer )使用了 Graph Explorer 。当我尝试在“/me”上使用“补丁”时,我没有同意的权限。因此,查询因“ErrorMethodNotAllowed”而失败。
正文是:{“jobTitle”:“test”}
解决方案
给用户一个全局管理员角色,然后尝试调用。看起来您正在直接使用 MSA 帐户。请获取 Azure Active Directory 用户的 UserPrincipalName(UPN),然后使用这些凭据登录到 Graph Explorer,并通过选择齿轮按钮授予 Directory.AccessAsUser.All 权限--> 选择权限--> Directory.AccessAsUser.All 和然后尝试通过在 JSON 有效负载中提供 officeLocation 来更新。它对我有用。
推荐阅读
- python - Dash-Plotly 应用程序身份验证 - 登录详细信息另存为 Cookie/Heroku 托管的“类型”对象错误
- javascript - 捕捉 window.open() 错误
- apache-spark - Spark 执行器需要驱动程序内存
- typescript - 如何传递 ID 以从资产文件夹中读取 Json
- angularjs - 在 IE 11 中远程数据绑定到 kendo ui 网格需要更多时间
- xamarin - Visual Studio App Center Analytics 不适用于 Xamarin Forms Android 项目
- dns - 使 coredns 响应依赖于 k8s 集群中的客户端命名空间
- ios - 运行 AVCaptureDevice.requestAccess 阻塞
- java - JUnit中测试多线程与Java中Main函数的区别
- docker - 一起使用 pm2 和 docker 有什么意义?