我正在使用谷歌的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"
};
}
};
谢谢