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
从样本中搜索,但找不到任何东西。
任何想法?
非常感谢
答
考虑帐户@ gui47评论我搜索如何添加ACCESS_TYPE参数,我发现了另一个post on 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"
};
}
};
非常感谢您
有无当你想要refresh_token时,你在授权码请求中添加了“access_type = offline”? – gui47 2014-12-02 00:22:13
每次我调用API时,我都没有收到任何刷新令牌。我只收到access_token填充。不知道你的意思。谢谢 – 2014-12-02 05:52:52
UserCredential和AuthorizationCodeFlow负责自动“刷新”令牌,这仅仅意味着获取新的访问令牌。这是通过使用长期存在的刷新令牌完成的,如果您在授权代码流中使用access_type = offline参数,则会同时使用访问令牌。您可以在您的示例代码网址上找到相关信息。 – gui47 2014-12-02 06:58:08