Java Facebook4j-此授权代码已被使用
我正在使用Facebook4j在facebook上发布一些东西。下面的代码第一次起作用,但现在它说:“此授权代码已被使用”。我想,每次我使用它时,它都会给我一个新的访问代码,但显然不是这样。我怎样才能告诉facebook给我一个新的访问令牌,而不是一次又一次的同一个Java Facebook4j-此授权代码已被使用,java,facebook,facebook-graph-api,oauth,facebook4j,Java,Facebook,Facebook Graph Api,Oauth,Facebook4j,我正在使用Facebook4j在facebook上发布一些东西。下面的代码第一次起作用,但现在它说:“此授权代码已被使用”。我想,每次我使用它时,它都会给我一个新的访问代码,但显然不是这样。我怎样才能告诉facebook给我一个新的访问令牌,而不是一次又一次的同一个 public class FacebookPublisher extends HttpServlet{ @Override protected void doGet(HttpServletRequest reque
public class FacebookPublisher extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Facebook facebook = new FacebookFactory().getInstance();
facebook.setOAuthAppId("appId", "appSecret");
facebook.setOAuthPermissions("email,manage_pages,publish_pages,publish_actions");
request.getSession().setAttribute("facebook", facebook);
StringBuffer callbackURL = request.getRequestURL();
int index = callbackURL.lastIndexOf("/");
callbackURL.replace(index, callbackURL.length(), "").append("/fb1callback");
response.sendRedirect(facebook.getOAuthAuthorizationURL(callbackURL.toString()));
}
}
这是回调servlet和代码:
public class FacebookPublisherCallback extends HttpServlet {
private static final long serialVersionUID = 6305643034487441839L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Facebook facebook = (Facebook) request.getSession().getAttribute("facebook");
String oauthCode = request.getParameter("code");
try {
token = facebook.getOAuthAccessToken(oauthCode).getToken();
facebook = new FacebookFactory().getInstance();
facebook.setOAuthAppId("appId", "appSecret");
facebook.setOAuthPermissions("email,manage_pages,publish_pages,publish_actions");
facebook.setOAuthAccessToken(new AccessToken(token));
facebook.postStatusMessage("Hello World from Facebook4J.");
} catch (FacebookException e) {
e.printStackTrace();
}
}
}
访问令牌和
code
参数是两个不同的东西。在用户成功完成登录后,您将获得一个code
,然后您必须交换一个访问令牌(只能进行一次)。显示的代码似乎没有多大意义,例如,第二个代码部分中设置权限的行似乎完全不合适(这必须在调用登录时发生,而不是在发布时发生)。官方文档指向此示例代码:。回调类如下所示:。所以它也会像我一样用param代码获取访问令牌。这不对吗?你能不能提供一个有效的代码?