我正在编写一个小应用程序,它必须使用google对用户进行身份验证并获取他们的日历。
如果用户接受请求,Google会给我们一个RequestToken,其中包含RefreshToken。我们将 RefreshToken 存储在我们的数据库中,并使用 Diamto DatabaseDataStore 中的示例。
要将刷新令牌存储在数据库中,我这样做:
var serialized = NewtonsoftJsonSerializer.Instance.Serialize(value);
好。它工作正常,但是当我在数据库中查找 RefreshToken 时,它必须反序列化。为此,我使用它
TaskCompletionSource<T> tcs = new TaskCompletionSource<T>();
....
tcs.SetResult(NewtonsoftJsonSerializer.Instance.Deserialize<T>(refreshToken));
刷新令牌是数据库中的字符串。
在反序列化时,我收到以下错误:
无法将 System.String 转换为 Google.Apis.Auth.OAuth2.Responses.TokenResponse.
我希望,任何人都可以告诉我问题出在哪里。
看起来您可以使用新字符串创建一个新的 TokenResponse 实例,如下所示:
var tokenResponse = new TokenResponse
{
RefreshToken = refreshToken // or you will have to deserialize the string first
}
然后,您可以继续按原样使用库,令牌响应没有访问令牌,因此库将尝试使用刚刚从数据库中获取
的刷新令牌刷新访问令牌。令牌响应代码可在以下位置获得: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