Google Drive API - MVC IDataStore

问题描述:

我使用的是来自谷歌的MVC sample code以连接到Google云端硬盘。 但是我想实现我自己的IDataStore,以便我可以保留我的数据库中的用户凭据。Google Drive API - MVC IDataStore

随着FileStorage样品的一切工作正常,我也得到了令牌RefreshToken和更重要的是,当过期,会自动刷新令牌。

实施IDataStore看起来很容易:

public class MyDataStore : IDataStore 
{ 
    public Task ClearAsync() 
    { 
     ... 
    } 

    public Task DeleteAsync<T>(string key) 
    { 
     ... 
    } 

    public Task<T> GetAsync<T>(string key) 
    { 
     ... 
    } 

    public Task StoreAsync<T>(string key, T value) 
    { 
     ... 
    } 
} 

所以在StoreAsync我保存在我的数据库中的凭据,并在GetAsync我从数据库中获取它。

但奇怪的是,当使用这个我收到access_token但没有refresh_token从谷歌返回。

我试过使用自定义IDataStore从样本中搜索,但找不到任何东西。

任何想法?

非常感谢

+1

有无当你想要refresh_token时,你在授权码请求中添加了“access_type = offline”? – gui47 2014-12-02 00:22:13

+0

每次我调用API时,我都没有收到任何刷新令牌。我只收到access_token填充。不知道你的意思。谢谢 – 2014-12-02 05:52:52

+1

UserCredential和AuthorizationCodeFlow负责自动“刷新”令牌,这仅仅意味着获取新的访问令牌。这是通过使用长期存在的刷新令牌完成的,如果您在授权代码流中使用access_type = offline参数,则会同时使用访问令牌。您可以在您的示例代码网址上找到相关信息。 – gui47 2014-12-02 06:58:08

考虑帐户@ gui47评论我搜索如何添加ACCESS_TYPE参数,我发现了另一个post on *与解决方案:

internal class OfflineGoogleAuthorizationCodeFlow : GoogleAuthorizationCodeFlow 
{ 
    public OfflineGoogleAuthorizationCodeFlow(GoogleAuthorizationCodeFlow.Initializer initializer) : base(initializer) { } 

    public override AuthorizationCodeRequestUrl CreateAuthorizationCodeRequest(string redirectUri) 
    { 
     return new GoogleAuthorizationCodeRequestUrl(new Uri(AuthorizationServerUrl)) 
     { 
      ClientId = ClientSecrets.ClientId, 
      Scope = string.Join(" ", Scopes), 
      RedirectUri = redirectUri, 
      AccessType = "offline", 
      ApprovalPrompt = "force" 
     }; 
    } 
}; 

非常感谢您