gpt4 book ai didi

c# - WebAuthenticationBroker.AuthenticateAsync 不工作

转载 作者:行者123 更新时间:2023-11-30 16:18:57 27 4
gpt4 key购买 nike

我正在构建一个 Windows 8 应用程序,我试图在应用程序启动时从 Google 数据 API 获取 token 。我构建了一个函数来执行此操作,它具有以下代码:

string authCodeUrl = UrlHelpers.BaseUrlFactory(UrlType.OAuth) +
"?client_id=" + _clientId +
"&redirect_uri=" + _redirectUri +
"&response_type=code" +
"&scope=" + _scope;

Uri startUri = new Uri(authCodeUrl);
Uri endUri = new Uri("https://accounts.google.com/o/oauth2/approval?");

WebAuthenticationResult webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.UseTitle, startUri, endUri);

我在 App.xaml.cs OnLaunched() 中调用函数,在 Window.Current.Activate() 调用之前。我这样做的原因是因为我的 MainViewModel 中已经需要 token 。

奇怪的是:当我以正常方式(通过 Visual Studio)启动我的应用程序时,它卡在了启动画面(启动画面保持了很长时间),但是当我在这一行放置一个断点时:

WebAuthenticationResult webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.UseTitle, startUri, endUri);

逐步完成后,我突然看到一个登录窗口,允许我登录并获取 token ,这意味着闪屏消失了,我可以使用我的应用程序了。

当我从我的 App.xaml.cs 中删除调用并仅从我的 ViewModel 请求 token 时,我遇到了同样的问题:它仍然停留在 SplashScreen 上。当我从我的 App.xaml.cs 请求 token 但在 Window.Current.Activate() 调用之后移动请求时,我也遇到了这个问题。但在这些情况下,登录后启动画面消失,但屏幕保持黑色。我没有看到我的应用程序。

P.s.,这是我从 App.xaml.cs 请求 token 的方式(OnLaunched 标记为 async):

IOAuth2Service oAuth2Service = new OAuth2Service();
await oAuth2Service.GetToken();

OAuth2Service 只是一个具有方法 GetToken() 的对象。这个方法就是做我上面描述的。

有谁知道为什么当我使用断点单步执行应用程序时它可以工作,但当我不单步执行它而只是启动它时却不行?

我已经隔离了问题并创建了一个仅包含此代码的 Github 项目。您可以在这里找到它:https://github.com/Avalaxy/OAuth2WinRT/tree/master/App1 .有一个调用 OAuth2.GetToken() 的 app.xaml.cs。

最佳答案

根据 documentation -

If the app or its splash screen is kept on screen there is no time limit, but eventually the app needs to call Activate to progress.

不可否认,这有点含糊并且需要解释,但是在 GetToken 请求之前移动对 activate 的调用将使您摆脱看似潜在的竞争条件。

关于c# - WebAuthenticationBroker.AuthenticateAsync 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15666802/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com