1

我已经在VB.NET中做了一个小程序,基本上,与Google云端硬盘同步一个目录,然后它获取共享链接,并为此创建一个快捷方式文件上传的文件。所有的工作都很好,很好。现在,当我开始使用不同帐户进行游戏时,我的问题就出现了,而不仅仅是我正在运行测试的帐户。 我发现,当我使用此代码验证:谷歌驱动器:上传到一个不同的帐户比活动的

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只是应该这样工作,它总是将文件上传到您正在迅速登录的帐户。

+0

你在哪里指定USEREMAIL?另外,你可以重新格式化你的代码,所以我们不需要像往常那样滚动一下吗? –

+0

FileDataStore存储与您正在发送的任何Me.UserEmail相关的身份验证。您需要将其更改或创建自己的Idatastore实现来移动您的令牌。 – DaImTo

+0

对不起,我编辑了代码,因此它更清晰。 userEmail在证书声明处传递。但我认为这不重要,我放在那里 – Nadyn

回答

1

此行Dim credentials As UserCredential = GoogleWebAuthorizationBroker... 说:“请去询问当前登录用户是否允许访问他驱动并将结果存储在凭证中,然后我可以将其呈现给云端硬盘“。

如果我正确理解你的问题,你想要的是“忽略当前登录的用户。请给我一个我想上传的固定帐户的凭证,而不必通过任何认证流程”。

如果我有你的问题的权利,答案是How do I authorise an app (web or installed) without user intervention? (canonical ?)

相关问题