很难理解正在发生的事情,我确实需要一些想法和投入。拜托,我不太擅长用文字描述问题所在,所以请温柔点。
我有一个 Blazor wasm 前端和一个 Azure Function 后端。
我进行了标准的、没什么特别的 Azure AD 登录。稍后在代码中,我使用不记名令牌与 AzFunction 连接,并且它有效。AzFunction 评估令牌并识别用户以进行进一步处理。我应该提到 AzFunction 连接到 Graph 和其他 API。
所以一切都很好并且工作正常,这是我的问题。
我想在登录时连接到 AzFuntion,以获取一些用户配置文件信息。为了调试,我只做了一个按钮,一切正常。
然后,我将“按钮代码”移至 Authenticator.razor 中由 RemoteAuthenticatorView OnLogInSucceeded 调用的方法。
<RemoteAuthenticatorView Action="@Action" LogInFailed="LogInFailedFragment" OnLogInSucceeded="LoginComplete" />
这是我的问题: 使用 OnLogInSucceeded 我得到了 2 个必须响应的 Azure AD 登录信息。第一个之后,直接进入第二个。这一切都只是因为我将代码从按钮移至 OnLogInSucceeded。当我调试时,我清楚地看到令牌在连接到 AzFunction 之前就存在。
另外,当我在 Visual Studio 中从 OnLogInSucceeded 调用的 LoginComplete 函数中设置断点并保持几秒钟时,它只需一个登录对话框即可完成登录过程。
谁能帮我理解为什么?
有什么更好的指示可以输入“获取用户个人资料”代码吗?我需要的是要运行的代码,因此当登录完成后,只需一次登录即可检索用户配置文件信息。
编辑:
代码似乎有一个更好的解决方案,但是我仍然不明白是什么让第二次登录出现......这是我问题的主要原因。
我想在我的项目中使用 PageIterator,它工作得很好,直到我想从 AzureAD 中取出组成员。无论我做什么,PageIterator 都会失败并显示“The Parsable does not contains a collection property”。
List<User> users = new();
var result = await graphClient.Groups[groupId].Members.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Top = 2;
// I only do this to force pageing, will not be on final version
});
var pageIterator = PageIterator<User, DirectoryObjectCollectionResponse>
.CreatePageIterator(graphClient, result,
(m) =>
{
users.Add(m);
return true;
});
await pageIterator.IterateAsync();
Run Code Online (Sandbox Code Playgroud)
我的代码强制执行 2 项。这只是因为我绝望地试图找出我的代码出了什么问题。
我对这里出了什么问题一无所知,任何帮助都会很棒。
c# asp.net-core microsoft-graph-sdks microsoft-graph-api graphserviceclient