通过“应用和网站”从Facebook删除我的网站后,该网站不再工作

时间:2019-02-28 13:32:16

标签: facebook-graph-api oauth oauth-2.0 facebook-oauth scribe

我的网站(Spring MVC)允许用户使用其Facebook帐户进行注册,并稍后使用其Facebook帐户登录到我的网站。我使用scribejava(https://github.com/scribejava/scribejava)与Facebook进行Oauth集成。

我已经测试了一个用例,无法找到解决方法。用户通过使用Facebook帐户成功在我的网站上注册后,就是这种情况:

  1. 测试人员通过Facebook登录到Facebook
  2. 测试人员转到“设置”->“应用和网站”
  3. 测试人员删除了我的网站
  4. 测试人员转到我的站点,然后单击“使用Facebook登录”按钮。

在这种情况下,测试人员总是在Facebook站点上收到一条错误消息,而不是要求测试人员再次接受权限。请参见以下屏幕截图:

enter image description here

当我单击“使用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特有的问题?

1 个答案:

答案 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"))