我有一个asp.net 4.5 webforms网站,允许用户将他们的帐户链接到Twitter并直接从我的网站发送推文。
我的应用程序已在Twitter注册,我能够成功为用户的帐户授权我的应用程序,并且最初可以发推特,但几个小时后推文就会停止工作。我正在使用tweetsharp来处理授权。
我的代码是:
TwitterClientInfo twitterClientInfo = new TwitterClientInfo();
twitterClientInfo.ConsumerKey = ConsumerKey;
twitterClientInfo.ConsumerSecret = ConsumerSecret;
var requestToken = new OAuthRequestToken { Token = oauthtoken };
TwitterService twitterService = new TwitterService(ConsumerKey, ConsumerSecret);
OAuthAccessToken accessToken = twitterService.GetAccessToken(requestToken, oauthverifier);
twitterService.AuthenticateWith(accessToken.Token, accessToken.TokenSecret);
TwitterUser user = twitterService.VerifyCredentials(new VerifyCredentialsOptions());
SendTweetOptions options = new SendTweetOptions();
options.Status = tweetText;
twitterService.SendTweet(options);
我注意到,当应用程序成功发送推文时,用于对用户进行身份验证的accessToken.Token值具有正确的值(一长串数字和大写/小写字符)但是当它停止发推时accessToken.Token值只是一个问号“?”。
Twitter说它不会使令牌过期,所以我无法理解发生了什么或如何解决它?如果我进入我的Twitter帐户并取消授权我的应用程序并再次通过授权它可以正常工作几个小时,但显然这不是我可以要求我的用户做的事情。任何人都可以建议解决这个问题 - 要么停止accessToken值?或处理它并获得适当的值(如果没有重新授权应用程序)
答案 0 :(得分:1)
好吧,在没有开始理解实际问题的情况下,我设法解决了它
不是每次都通过以下方式检索访问令牌:
var requestToken = new OAuthRequestToken { Token = oauthtoken };
OAuthAccessToken accessToken = twitterService.GetAccessToken(requestToken, oauthverifier);
twitterService.AuthenticateWith(accessToken.Token, accessToken.TokenSecret);
我只执行一次并在数据库中存储accessToken.Token和accessToken.TokenSecret,并在发送和提供时检索它们
twitterService.AuthenticateWith(accessTokenFromDB, accessokenSecretFromDB);
我已经看到某个地方Twitter没有过期令牌,所以这应该有效。当然它整个周末一直在为我工作,而原始代码会在几个小时后停止工作。
认为这可能有助于其他一些有同样问题的人。