Я реализовал свой обычай IDataStore
, так что я могу хранить End лексем пользователя на моей базы данных вместо реализации по умолчанию, которая сохраняется на FileSystem в% AppData%.Google Drive Апи - Пользовательское IDataStore с Entity Framework
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: Ошибка: "Государство является недействительным", Описание: "", Ури: ""
Google Исходный код Эталонные https://code.google.com/p/google-api-dotnet-client/source/browse/Src/GoogleApis.DotNet4/Apis/Util/Store/FileDataStore.cs?r=eb702f917c0e18fc960d077af132d0d83bcd6a88
Спасибо за вашу помощь
Hi. Mine также работает. Однако при первоначальном перенаправлении (для того, чтобы пользователь разрешил доступ к своему приводу Google) после «StoreAsync» вызывается '' GetAsync'', а ключ имеет значение *[email protected].xxx*. Так вот, я получил ошибку. Я не уверен, что ваш проект MVC, как мой ... проблема может быть связана с этим. Я отредактирую свой вопрос с помощью кода '' Controller''. –