Google Drive Api - MVC IDataStore



我正在使用谷歌的MVC示例代码连接到谷歌云端硬盘。但是,我想实现自己的IDataStore以便可以将用户凭据保留在数据库中。

使用文件存储示例,一切正常,我获得了令牌和刷新令牌,不仅如此,它还会在过期时自动刷新令牌

实现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从样本中搜索,但找不到任何东西。

有什么想法吗?

多谢

考虑到@gui47评论,我搜索了如何添加access_type参数,并在StackOverflow上找到了另一篇带有解决方案的帖子:

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"
        };
    }
};

谢谢

相关内容

  • 没有找到相关文章

最新更新