在Twitter4j中多次获取授权URL时出错

时间:2015-08-01 20:00:36

标签: twitter twitter-oauth twitter4j

我使用Twitter4j在我的webapp上实现授权工作流程(用户访问页面,Twitter请求权限,我收到回调并生成oauth访问令牌)。

我的第一个问题是,如果我调用一个方法来获取Twitter的信息:

Twitter twitter = TwitterFactory.getSingleton();
twitter.setOAuthConsumer(getClientId(), getClientSecret());

1)由于已经定义了OAuthConsumer,我会得到一个例外。如果已经定义了凭证,我无法找到如何询问单身人士的情况。最好的方法是什么?我的解决方案是将单身人士保存在私人会员中......

2)现在我想生成一个AuthorizationURL,所以我需要向Twitter单例询问OAuthRequestToken:

RequestToken oauthRequestToken = twitter.getOAuthRequestToken(getCallbackURL()); //FIXME

这引发了一个例外:

401:Authentication credentials (https://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid consumer key/secret, access token/secret, and the system clock is in sync.
message - Invalid or expired token.
code - 89


Relevant discussions can be found on the Internet at:
 http://www.google.co.jp/search?q=3cc69290 or
 http://www.google.co.jp/search?q=45a986a5
TwitterException{exceptionCode=[3cc69290-45a986a5], statusCode=401, message=Invalid or expired token., code=89, retryAfter=-1, rateLimitStatus=null, version=4.0.4}
 at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:164)
 at twitter4j.HttpClientBase.request(HttpClientBase.java:57)
 at twitter4j.HttpClientBase.post(HttpClientBase.java:86)
 at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:115)
 at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:92)
 at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:292)
 at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:287)
 (...)
  

注意:'相关讨论'我认为链接没有按预期工作......

简而言之:

1)我怎样才能询问单身人士是否已经定义了凭证以便设置OAOAon消费者'不会抛出错误吗?

2)如何重新询问单身人士为用户生成新的authorizationURL以便再次访问和授权?

也张贴在相应的forum

2 个答案:

答案 0 :(得分:2)

1)我怎样才能询问单身人士是否已经定义了凭证以便设置OAOAonConsumer'不会抛出错误?

有几种方法可以做到这一点。您可以在类路径上名为twitter4j.properties的属性文件中设置oAuth使用者密钥和机密。当您使用TwitterFactory时,这是默认属性的来源。

如果要以编程方式设置值,TwitterFactory也有一些重载的构造函数允许这样做:

    ConfigurationBuilder builder = new ConfigurationBuilder();
    builder.setOAuthConsumerKey(CONSUMER_KEY);
    builder.setOAuthConsumerSecret(CONSUMER_SECRET);
    Configuration configuration = builder.build();
    TwitterFactory factory = new TwitterFactory(configuration);
    Twitter twitter = factory.getInstance();

2)如何重新请求单例生成新的authorizationURL以供用户访问和授权(再次)?

我认为您的要求是每次都要让用户进行授权。如果是这种情况,则通过Twitters API处理。有2个oAuth端点https://api.twitter.com/oauth/authenticatehttps://api.twitter.com/oauth/authorizeauthenticate端点是正常Sign in with Twitter功能,用户将批准一次,然后每次自动登录。 authorize端点每次都需要授权。

使用Twitter4j,这些是可以在RequestToken上调用的单独方法。您可以根据需要重定向到相应的URL。

答案 1 :(得分:0)

我找到的解决方案如下:

Twitter instance = new TwitterFactory().getInstance();
instance.setOAuthConsumer(getClientId(), getClientSecret());
RequestToken requestToken = new RequestToken(getOauthToken(),getOauthTokenSecret());
AccessToken oAuthAccessToken = instance.getOAuthAccessToken(requestToken, oauthVerifier);

requestTokenoauthVerifier作为回调中的参数被接收。 getOauthToken()getOauthTokenSecret()检索第一步中库检索到的令牌,并保存在缓存中(用户 - >令牌)。

受此问题/答案的启发:Having multiple Twitter instances with twitter4j library.