我正在编写一个小应用程序,必须使用google对用户进行身份验证并获取日历。
如果用户接受请求,Google会向我们提供一个具有RefreshToken的RequestToken。 我们使用Diamto DatabaseDataStore中的示例将RefreshToken存储在我们的数据库中。
要将RefreshToken存储在数据库中,我这样做:
var serialized = NewtonsoftJsonSerializer.Instance.Serialize(value);
好的。它运行正常,但是当我在数据库中寻找RefreshToken时,它必须被反序列化。为此,我使用
TaskCompletionSource<T> tcs = new TaskCompletionSource<T>();
....
tcs.SetResult(NewtonsoftJsonSerializer.Instance.Deserialize<T>(refreshToken));
RefreshToken是数据库中的字符串。
在反序列化中,我收到以下错误:
无法从System.String转换或转换为 Google.Apis.Auth.OAuth2.Responses.TokenResponse。
我希望,任何人都可以告诉我问题在哪里。
答案 0 :(得分:1)
看起来你可以用新字符串创建一个新的TokenResponse实例,如下所示:
var tokenResponse = new TokenResponse
{
RefreshToken = refreshToken // or you will have to deserialize the string first
}
然后您可以继续按原样使用库,令牌响应没有访问令牌,因此库将尝试使用您从数据库中获取的刷新令牌来刷新访问令牌。
TokenResponse代码位于: https://github.com/google/google-api-dotnet-client/blob/master/Src/GoogleApis.Auth/OAuth2/Responses/TokenResponse.cs#L49
这里将提供将重用令牌响应的代码: https://github.com/google/google-api-dotnet-client/blob/master/Src/GoogleApis.Auth/OAuth2/AuthorizationCodeInstalledApp.cs#L67