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

标签 twitter twitter-oauth twitter4j

我正在使用 Twitter4j 在我的 web 应用程序上实现授权工作流程(用户访问页面,twitter 请求权限,我收到回调并生成 oauth 访问 token )。

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

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

1) 由于 OAuthConsumer 已经被定义,我会得到一个异常。我找不到如何询问单例是否已经定义了凭据。最好的办法是什么?我的解决方案是将单例保存在私有(private)成员中......

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)
 (...)

Note: the 'Relevant discussions' links are not working as expected I think...

简而言之:

1) 如何询问单例是否已定义凭据以便“setOAuthConsumer”不会引发错误?

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

也贴在相应的forum

最佳答案

1) 如何询问单例是否已定义凭据以便“setOAuthConsumer”不会引发错误?

有几种方法可以做到这一点。您可以在类路径上名为 twitter4j.properties 的属性文件中设置 oAuth 使用方 key 和 secret 。当您使用 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供用户访问和授权(再次)?

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

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

关于twitter - 在 Twitter4j 中多次获取授权 URL 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31765664/

相关文章:

ios - PFUser logInWithAuthTypeInBackground(错误 : Twitter auth configuration missing)

ruby-on-rails - 在 ruby​​ on Rails 中有一个指向变量 twitter 句柄的 href 链接

ios - 根据用户是否登录有条件地显示不同的 View Controller

c# - 需要代理身份验证(Forefront TMG 需要授权才能完成请求。拒绝访问 Web 代理筛选器。)

c# - .NET (C#) 的 Twitter OAuth 授权问题

java - Twitter4j,未知主机异常

Android twitter4j - 如何共享远程图像?

Java - Reader 无法解析

java - Twitter4j:身份验证凭据丢失错误

android - 使用 twitter4j 登录