GoogleWebAuthorizationBroker 中的新 FileDataStore 每次都会产生一个新端口
new FileDataStore in GoogleWebAuthorizationBroker results in a new port each time
所以我遵循了 http://www.daimto.com/, namely http://www.daimto.com/webmaster-tools-api-with-c/ 中的一些示例。经过漫长的一夜后,我终于可以让它工作了。我这样做的方法是简单地删除
new FileDataStore("Daimto.GoogleWebMasters.Auth.Store")
将代码更改为:
UserCredential credential = GoogleWebAuthorizationBroker(new ClientSecrets
{ ClientId = clientId, ClientSecret = clientSecret }
, scopes
, userName
, CancellationToken.None
, null).Result; // <-- notice null here
那么数据存储真的有必要吗?当我添加它时,我的 IIS 每次刷新都会生成一个新的端口号,因此无法在 google 中授权 url 重定向。
顺便说一句,我尝试了目录的物理完整路径,但结果相同。
如果默认情况下您不包括文件数据存储或任何数据存储,客户端库将使用文件数据存储并在 %appData%
中创建文件
所以从技术上讲你不需要使用它。
FileDataStore 到底做了什么?
让我们看看 FileDataStore。以下代码验证时。将在执行代码的计算机上的 %AppData% 目录中创建一个名为 Drive.Auth.Store 的文件夹。
因此我们将有一个名为 %AppDatat%\Drive.Auth.Store 的新目录。当我检查我的机器时,我发现它在这里 C:\Users\lindaHP\AppData\Roaming\Drive.Auth.Store
UserCredential credential;
using (var stream = new FileStream(clientSecretsJsonFilePath
,FileMode.Open
,FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { DriveService.Scope.Drive, DriveService.Scope.DriveFile },
"LookIAmAUniqueUser",
CancellationToken.None,
new FileDataStore("Drive.Auth.Store")
).Result;
}
假设用户在身份验证请求屏幕上单击接受,将在该目录中创建一个具有以下结构的新文件:
Google.Apis.Auth.OAuth2.Responses.TokenResponse-LookIAmAUniqueUser.TokenResponse-LookIAmAUniqueUser
每个用户都有自己的文件,您可以通过更改“LookIAmAUniqueUser”值来更改用户。
该文件包含访问此用户帐户所需的所有信息。
备用教程
我为您准备了另一个教程。 Google .net – FileDatastore demystified
我的笔记
我不知道不使用 filedatastore 会如何改变端口的显示与否。我需要对此进行测试,这可能是客户端库中的错误。或我猜测的功能取决于您如何看待它。
看来这个解决方案只是错误的方式,也许只是过时了。最后,我根据 this 重写了所有内容。现在它可以在本地和已发布的地方以及 FileDataStore 上找到。
所以我遵循了 http://www.daimto.com/, namely http://www.daimto.com/webmaster-tools-api-with-c/ 中的一些示例。经过漫长的一夜后,我终于可以让它工作了。我这样做的方法是简单地删除
new FileDataStore("Daimto.GoogleWebMasters.Auth.Store")
将代码更改为:
UserCredential credential = GoogleWebAuthorizationBroker(new ClientSecrets
{ ClientId = clientId, ClientSecret = clientSecret }
, scopes
, userName
, CancellationToken.None
, null).Result; // <-- notice null here
那么数据存储真的有必要吗?当我添加它时,我的 IIS 每次刷新都会生成一个新的端口号,因此无法在 google 中授权 url 重定向。 顺便说一句,我尝试了目录的物理完整路径,但结果相同。
如果默认情况下您不包括文件数据存储或任何数据存储,客户端库将使用文件数据存储并在 %appData%
中创建文件所以从技术上讲你不需要使用它。
FileDataStore 到底做了什么?
让我们看看 FileDataStore。以下代码验证时。将在执行代码的计算机上的 %AppData% 目录中创建一个名为 Drive.Auth.Store 的文件夹。
因此我们将有一个名为 %AppDatat%\Drive.Auth.Store 的新目录。当我检查我的机器时,我发现它在这里 C:\Users\lindaHP\AppData\Roaming\Drive.Auth.Store
UserCredential credential;
using (var stream = new FileStream(clientSecretsJsonFilePath
,FileMode.Open
,FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { DriveService.Scope.Drive, DriveService.Scope.DriveFile },
"LookIAmAUniqueUser",
CancellationToken.None,
new FileDataStore("Drive.Auth.Store")
).Result;
}
假设用户在身份验证请求屏幕上单击接受,将在该目录中创建一个具有以下结构的新文件:
Google.Apis.Auth.OAuth2.Responses.TokenResponse-LookIAmAUniqueUser.TokenResponse-LookIAmAUniqueUser
每个用户都有自己的文件,您可以通过更改“LookIAmAUniqueUser”值来更改用户。
该文件包含访问此用户帐户所需的所有信息。
备用教程
我为您准备了另一个教程。 Google .net – FileDatastore demystified
我的笔记
我不知道不使用 filedatastore 会如何改变端口的显示与否。我需要对此进行测试,这可能是客户端库中的错误。或我猜测的功能取决于您如何看待它。
看来这个解决方案只是错误的方式,也许只是过时了。最后,我根据 this 重写了所有内容。现在它可以在本地和已发布的地方以及 FileDataStore 上找到。