我使用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
中答案 0 :(得分:2)
有几种方法可以做到这一点。您可以在类路径上名为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();
我认为您的要求是每次都要让用户进行授权。如果是这种情况,则通过Twitters API处理。有2个oAuth端点https://api.twitter.com/oauth/authenticate
和https://api.twitter.com/oauth/authorize
。 authenticate
端点是正常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);
requestToken
和oauthVerifier
作为回调中的参数被接收。 getOauthToken()
和getOauthTokenSecret()
检索第一步中库检索到的令牌,并保存在缓存中(用户 - >令牌)。
受此问题/答案的启发:Having multiple Twitter instances with twitter4j library.