您可以在调用 CompleteAuthorizeAsync 后读取凭据,如下所示:
await pinAuth.CompleteAuthorizeAsync(PinTextBox.Text);
SharedState.Authorizer = pinAuth;
// This is how you access credentials after authorization.
// The oauthToken and oauthTokenSecret do not expire.
// You can use the userID to associate the credentials with the user.
// You can save credentials any way you want - database, isolated storage, etc. - it's up to you.
// You can retrieve and load all 4 credentials on subsequent queries to avoid the need to re-authorize.
// When you've loaded all 4 credentials, LINQ to Twitter will let you make queries without re-authorizing.
//
var credentials = pinAuth.CredentialStore;
string oauthToken = credentials.OAuthToken;
string oauthTokenSecret = credentials.OAuthTokenSecret;
string screenName = credentials.ScreenName;
ulong userID = credentials.UserID;
因此,您需要做的是有一种方法来存储用户信息。为简单起见,我假设您使用的是数据库。您的存储也可以是您选择的任何格式的文件。假设您正在使用数据库,您应该有一个包含用户信息的表,并且您应该知道正在使用您的应用程序的用户是谁。该用户在您的表中有一个 ID,并且该表应该包含 oauthToken 和 oauthTokenSecret 的字段。您还可以为 Twitter 的 UserID 和 ScreenName 添加字段,但 OAuth 不需要它们。
请注意,上面的代码从授权方 pinAuth 获取对 CredentialStore 的引用。这发生在调用 CompleteAuthorizeAsync 之后,因为在 OAuth 过程完成之前凭据不可用。参考凭证,阅读 OAuthToken 和 OAuthToken 属性。然后编写代码将 OAuthToken 和 OAuthTokenSecret 凭证存储到与当前用户关联的数据库中。
现在您已经为该用户存储了凭据。
在后续查询中,请确保您已使用所有四个凭据加载授权方:ConsumerKey、ConsumerSecret、OAuthToken 和 OAuthTokenSecret。这是一个例子:
string oauthToken = null;
string oauthTokenSecret = null;
// read OAuthToken and OAuthTokenSecret from the database table where you previously
// stored OAuthToken and OAuthTokenSecret for this user. Put the OAuthToken and
// OAuthTokenSecret into the variables named oauthToken and oauthTokenSecret above.
pinAuth = new PinAuthorizer
{
// Get the ConsumerKey and ConsumerSecret for your app and load them here.
CredentialStore = new InMemoryCredentialStore
{
ConsumerKey = ConfigurationManager.AppSettings["consumerKey"],
ConsumerSecret = ConfigurationManager.AppSettings["consumerSecret"],
OAuthToken = oauthToken,
OAuthTokenSecret = oauthTokenSecret
},
// Note: GetPin isn't used here because we've broken the authorization
// process into two parts: begin and complete
GoToTwitterAuthorization = pageLink =>
OAuthWebBrowser.Navigate(new Uri(pageLink, UriKind.Absolute))
};
if (oauthToken == null)
await pinAuth.BeginAuthorizeAsync();
在实例化 PinAuthorizer 之前,请检查您是否有当前用户的 OAuthToken 和 OAuthTokenSecret。如果你这样做了,那么用它们填充授权者的 CredentialStore。如果没有,请将 OAuthToken 和 OAuthTokenSecret 保留为空,以便 LINQ to Twitter 将通过 OAuth 进程来获取令牌。如果您确实有 OAuthToken 和 OAuthTokenSecret 并将它们分配给 CredentialStore 属性,那么 LINQ to Twitter 将不需要执行 OAuth 过程,您可以使用授权方立即执行查询。