Linqtograb保存的凭据
本文关键字:保存 Linqtograb | 更新日期: 2023-09-27 17:51:06
我使用linqtotwitter库,在我的win forms应用程序中,我可以对twitter进行API调用,但是当我关闭应用程序并重新打开时,我需要再次重复输入pin码///
在推特程序tweetdesc它只需要一次输入引脚?我怎样才能在应用程序本身做得很好?
我读:
授权后,保存与该用户关联的凭据。下次用户需要对你的应用执行操作时,获取保存的凭据并将所有4个凭据加载到授权器中。当授权者拥有所有4个凭据时,它不再需要执行授权过程,您可以在不授权
的情况下执行查询但是如何做到呢?
可以在调用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凭证存储到数据库中,并与当前用户关联。
现在您已经为该用户存储了凭据。
在随后的查询中,确保您已经用所有四个凭据加载了Authorizer: 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到Twitter将不需要执行OAuth过程,你可以使用授权器立即执行查询。