Больше не работает после удаления моего сайта из Facebook через «Приложения и сайты» - PullRequest
0 голосов
/ 28 февраля 2019

Мой веб-сайт (Spring MVC) позволяет пользователям регистрироваться, используя свои учетные записи Facebook, и позже заходить на мой сайт, используя свои учетные записи Facebook.Я использую scribejava (версия 6.6.3) (https://github.com/scribejava/scribejava) для интеграции Oauth с Facebook.

Я проверил вариант использования и не могу найти способ его решить. Вот списокшагов:

  1. Тестер переходит на страницу «Вход» моего сайта, нажимает «Войти через Facebook», предоставляет разрешения на Facebook, перенаправляется на мой сайт и выходит из системы. Этонормальный и успешный поток.
  2. Тестер входит в Facebook на Facebook.com
  3. Тестер переходит в «Настройки» -> «Приложения и веб-сайты» и удаляет мой сайт
  4. Тестер переходит кНа странице «Вход» моего сайта нажимает кнопку «Войти через Facebook», перенаправляется на Facebook и видит сообщение об ошибке.

На шаге 4 тестер всегда получает сообщение об ошибке приСайт Facebook вместо того, чтобы просить тестера снова предоставить разрешения. См. Следующий снимок экрана:

enter image description here

Я не могу найти способ в Facebook удалить это сообщение, когданажав на кнопку «Войти сКнопка "Facebook"Вот мой код для веб-интерфейса.Я что-то пропустил?

@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/v3.2/me");
        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. use the email to create an account or if the email address exists, direct a userto their account page

    } catch (Exception e) {

        response.sendRedirect("/oauthFail");
    }

}   

Как справиться с этой ситуацией?Я чувствую, что что-то не так, мой код или scribejava имеет проблему с фреймворком.Или это проблема для Facebook?

1 Ответ

0 голосов
/ 04 марта 2019

Я только что проверил случай.Не удалось воспроизвести.Вы пробовали запустить этот пример https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java?Я думаю, что ваша проблема может быть с логикой версий API в Facebook.Вы можете явно использовать последнюю версию .build(FacebookApi.customVersion("3.2"))

...