我實現我的自定義IDataStore
,這樣我可以存儲在我的數據庫,而不是默認的實現,這是保存在%APPDATA%以內文件系統最終用戶令牌。谷歌雲端硬盤API - 自定義IDataStore實體框架
public class GoogleIDataStore : IDataStore
{
...
public Task<T> GetAsync<T>(string key)
{
TaskCompletionSource<T> tcs = new TaskCompletionSource<T>();
var user = repository.GetUser(key.Replace("oauth_", ""));
var credentials = repository.GetCredentials(user.UserId);
if (key.StartsWith("oauth") || credentials == null)
{
tcs.SetResult(default(T));
}
else
{
var JsonData = Newtonsoft.Json.JsonConvert.SerializeObject(Map(credentials));
tcs.SetResult(NewtonsoftJsonSerializer.Instance.Deserialize<T>(JsonData));
}
return tcs.Task;
}
}
控制器
public async Task<ActionResult> AuthorizeDrive(CancellationToken cancellationToken)
{
var result = await new AuthorizationCodeMvcApp(this, new GoogleAppFlowMetadata()).
AuthorizeAsync(cancellationToken);
if (result.Credential == null)
return new RedirectResult(result.RedirectUri);
var driveService = new DriveService(new BaseClientService.Initializer
{
HttpClientInitializer = result.Credential,
ApplicationName = "My app"
});
//Example how to access drive files
var listReq = driveService.Files.List();
listReq.Fields = "items/title,items/id,items/createdDate,items/downloadUrl,items/exportLinks";
var list = listReq.Execute();
return RedirectToAction("Index", "Home");
}
問題發生在重定向事件。之後,第一次重定向它工作正常。
我發現重定向事件有些不同。在重定向事件上,T
不是令牌響應,而是字符串。此外,密鑰前綴爲「oauth_」。
所以我認爲我應該返回一個不同的重定向結果,但我不知道該返回什麼。
我得到的錯誤是:Google.Apis.Auth.OAuth2.Responses.TokenResponseException:錯誤: 「國家是無效的」,說明: 「」 烏里: 「」
感謝您的幫助
嗨。 Mine也在工作。但是,在「StoreAsync」之後的初始重定向(用於授權訪問其谷歌驅動器)中,調用GetAsync並且鍵值爲*[email protected]*。所以這是我得到的錯誤。我不確定你的項目是否與我一樣是MVC ......這個問題可能與此有關。我將用「Controller」代碼編輯我的問題。 – 2014-12-06 14:59:36