【发布时间】:2015-09-04 12:00:07
【问题描述】:
我在 VB.NET 中做了一个小程序,它基本上将目录与 Google Drive 同步,然后它获取共享链接并为该上传文件创建一个快捷方式文件。一切正常。现在,当我开始使用不同的帐户而不是仅运行测试的帐户时,我的问题就出现了。 我观察到,当我使用此代码进行身份验证时:
Dim clientS As ClientSecrets = New ClientSecrets()
clientS.ClientId = "ClientID"
clientS.ClientSecret = "MySecret"
Dim scopes As IList(Of String) = New List(Of String)()
scopes.Add(DriveService.Scope.Drive)
scopes.Add(DriveService.Scope.DriveFile)
Dim credentials As UserCredential = GoogleWebAuthorizationBroker.AuthorizeAsync(clientS, scopes, Me.UserEmail, System.Threading.CancellationToken.None, New FileDataStore(Me.TokensFolderPath)).Result
Dim initializer As BaseClientService.Initializer = New BaseClientService.Initializer()
initializer.HttpClientInitializer = credentials
initializer.ApplicationName = "Drive API Test"
Me.service = New DriveService(initializer)
第一次这将打开一个浏览器窗口并询问用户查看、编辑……您的文件的权限。然后它会创建一个令牌以避免下次应用程序运行时询问。 问题是,即使我在代码上指定了 userEmail,它也不在乎。它只会打开浏览器并使用您在那个确切时刻激活的任何帐户询问权限,因此,创建的令牌将属于该帐户,而不是我指定的帐户。
是我做错了什么还是缺少了什么?或者,API 应该就是这样工作的,它总是将文件上传到您当前登录的帐户。
【问题讨论】:
-
您在哪里指定 userEmail?另外,你能重新格式化你的代码,这样我们就不需要横向滚动太多了吗?
-
FileDataStore 存储与您发送的 Me.UserEmail 相关联的身份验证。您将需要更改它或创建自己的 Idatastore 实现来移动您的令牌。
-
对不起,我已经编辑了代码,所以它更清晰。 userEmail 在凭据声明时传递。但我认为放在那里的东西并不重要
-
@DaImTo 但我认为这不是我的问题。我的问题是,我第一次运行程序时,一切正常(只要我用我想上传文件的帐户登录),但第二次如果我更改我登录的帐户在浏览器中并尝试再次上传文件,它确实上传了文件,是的,但是到我当时在浏览器中登录的帐户。
标签: vb.net google-drive-api google-oauth google-api-dotnet-client