英文:
Google.Apis.Oauth2.v2 + UWP: Access to path c:\users is denied
问题
在将Google.Apis.Oauth2.v2
NuGet包升级到版本1.60.0.1869后,当尝试在我的UWP应用程序中使用Google登录时,我开始收到异常拒绝访问路径C:\Users。以下是我的代码:
string fname = @"Assets\User\Auth\google_client_secrets.json";
StorageFolder InstallationFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
var stream = await InstallationFolder.OpenStreamForReadAsync(fname);
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
stream,
new[] { "profile", "email" },
"me",
CancellationToken.None);
异常发生在GoogleWebAuthorizationBroker.AuthorizeAsync
调用中。
这段代码(稍作更改)在使用Google.Apis.Oauth2.v2包版本1.25.0.859之前运行良好,但现在此包已过时且不再起作用。
如何在我的UWP应用程序中使用Google登录?
注意:我明白UWP应用程序无法访问c:\Users,但我的代码从未请求该文件夹中的任何内容。google_client_secrets.json存在,我可以从流中读取它,因此该文件与问题无关。
更新
在我将AuthorizeAsync
的第5个参数设置为以下内容后:
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
stream,
new[] { "profile", "email" },
"me",
CancellationToken.None,
new FileDataStore(ApplicationData.Current.LocalCacheFolder.Path, true));
异常消失了。现在,执行线程只是在AuthorizeAsync
内部终止,并出现以下错误弹窗:
英文:
After updating Google.Apis.Oauth2.v2
NuGet package to v. 1.60.0.1869, I start getting exception Access to the path C:\Users is denied when trying login with Google in my UWP
app. Here's my code:
string fname = @"Assets\User\Auth\google_client_secrets.json";
StorageFolder InstallationFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
var stream = await InstallationFolder.OpenStreamForReadAsync(fname);
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
stream,
new[] { "profile", "email" },
"me",
CancellationToken.None);
The exception occurs in GoogleWebAuthorizationBroker.AuthorizeAsync
call.
This code (with some light changes) worked well before with Google.Apis.Oauth2.v2 package v. 1.25.0.859, but now this package is obsolete and doesn't work anymore.
How to login with Google in my UWP app?
NOTE: I understand that UWP app doesn't have access to c:\Users, but my code never request anything in the folder. google_client_secrets.json exists and I can read it in the app from the stream, so this file is unrelated to the issue.
UPDATE
After I set the 5th parameter of AuthorizeAsync
like this:
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
stream,
new[] { "profile", "email" },
"me",
CancellationToken.None
new FileDataStore(ApplicationData.Current.LocalCacheFolder.Path, true));
the exception is gone. Now the execution thread just dies inside the AuthorizeAsync
and I start getting the following error popup:
答案1
得分: 0
经过一些尝试,我未能使 Google.Apis.Oauth2.v2
NuGet 包版本 1.60.0.1869 在 UWP 中工作。我通过移除 NuGet 并按照我在这里回答中描述的方式自己实现了 Google 登录功能。
英文:
After some tried, I failed to make Google.Apis.Oauth2.v2
NuGet package v. 1.60.0.1869 to work with UWP. I made Google Login works by removing the NuGet and implementing OAuth flow myself as described in my answer here.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论