我的网站(Spring MVC)允许用户使用其Facebook帐户进行注册,并稍后使用其Facebook帐户登录到我的网站。我使用scribejava(https://github.com/scribejava/scribejava)与Facebook进行Oauth集成。
我已经测试了一个用例,无法找到解决方法。用户通过使用Facebook帐户成功在我的网站上注册后,就是这种情况:
在这种情况下,测试人员总是在Facebook站点上收到一条错误消息,而不是要求测试人员再次接受权限。请参见以下屏幕截图:
当我单击“使用Facebook登录”按钮时,无法在Facebook上找到删除此消息的方法。这是我的Web界面代码。我错过了什么吗?
@RequestMapping( value="/facebook", method = RequestMethod.GET)
public void facebook(HttpServletRequest request,
@RequestParam(value = "page", required = true) String page,
HttpServletResponse response) throws Exception {
try {
OAuth20Service service = new ServiceBuilder(config.getProperty("facebook.clientId"))
.apiSecret(config.getProperty("facebook.clientSecret"))
.callback(getCallback())
.build(FacebookApi.instance());
String authUrl = service.getAuthorizationUrl();
response.sendRedirect(authUrl);
} catch (Exception e) {
response.sendRedirect("/oauthFail");
}
}
@RequestMapping( value="/facebook/callback", method = RequestMethod.GET)
public void facebookCallback(HttpServletRequest servletRequest,
@RequestParam(value = "code", required = false) String code,
@RequestParam(value = "error", required = false) String error,
HttpServletResponse servletResponse
) throws Exception {
try {
OAuth20Service service = new ServiceBuilder(config.getProperty("facebook.clientId"))
.apiSecret(config.getProperty("facebook.clientSecret"))
.callback(getCallback())
.build(FacebookApi.instance());
OAuth2AccessToken accessToken = service.getAccessToken(code);
final OAuthRequest request = new OAuthRequest(Verb.GET, "https://graph.facebook.com/me?fields=name,email");
service.signRequest(accessToken, request);
final com.github.scribejava.core.model.Response response = service.execute(request);
String body = response.getBody();
JSONObject jObject = new JSONObject(body);
String email = jObject.getString("email");
//success. direct users to their account page
} catch (Exception e) {
response.sendRedirect("/oauthFail");
}
}
如何处理这种情况?我觉得我的代码有问题或scribejava有框架问题。还是这是Facebook特有的问题?
答案 0 :(得分:1)
我刚刚测试过此案。无法复制。
您是否尝试运行此示例
https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java
?
我认为您的问题可能出在Facebook中的API版本逻辑上。
您可以尝试明确使用最新的.build(FacebookApi.customVersion("3.2"))