GoogleWebAuthorizationBroker中的新FileDataStore每次都会生成一个新端口

时间:2016-01-22 11:37:33

标签: google-api-dotnet-client google-oauth2 google-oauth-.net-client

所以我跟随了Lazy foreach on a Spark RDD的一些例子,即http://www.daimto.com/。经过漫长的一夜,我能够让它上班。我这样做的方法是简单地删除

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重定向。 顺便说一句,我尝试了目录的物理完整路径,但结果相同。

2 个答案:

答案 0 :(得分:1)

如果您在默认情况下不包含文件数据存储或任何数据存储,则客户端库将使用文件数据存储并在%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不会改变出现的端口。我需要测试它可能是客户端库中的错误。或者我猜的功能取决于你如何看待它。

答案 1 :(得分:0)

似乎这种解决方案只是错误的方式,也许只是过时了。最后,我重写了基于this的所有内容。现在它可以在本地和已发布的文件中找到它们,并使用FileDataStore。