Я пытаюсь создать поток аутентификации в нашем приложении для facebook в java. Я использую библиотеку facebook4j.Facebook OAuth redirect_uri Issue
Мой соответствующий код выглядит следующим образом -
public String authenticate() throws IOException {
Facebook facebook = new FacebookFactory().getInstance();
String redirectURL = facebook.getOAuthAuthorizationURL("http://localhost:9099/default/facebook/verify.html");
servletResponse.sendRedirect(redirectURL);
return null;
}
public String verify() throws Exception {
String code = servletRequest.getParameter("code");
Facebook facebook = new FacebookFactory().getInstance();
AccessToken accessToken = facebook.getOAuthAccessToken(code);
String token = accessToken.getToken();
servletResponse.getWriter().write(token);
return null;
}
Я получаю ошибку после перенаправления на этой линии -
AccessToken accessToken = facebook.getOAuthAccessToken(code);
Ошибка заключается в следующем -
FacebookException{statusCode=400, errorType='OAuthException', errorMessage='redirect_uri isn't an absolute URI. Check RFC 3986.', errorCode=191, errorSubcode=-1, version=2.2.2}
at facebook4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:179)
at facebook4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65)
at facebook4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:97)
at facebook4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:107)
redirectURL что Я получаю от facebook при первом звонке -
пытался без использования кодировки тоже -
Это правильно перенаправлении 'проверить' имеет URL-адрес что-то вроде -
facebook4j.properties
oauth.appId=416XXXXXXXXX389
oauth.appSecret=9ed3XXXXXXb6acXXXXXXXXc7acXXXX5
oauth.permissions=email,public_profile,user_friends
My Facebook Основные параметры App являются -
важные продвинутые настройки -
Я полностью понимаю, что аналогичный вопрос был опубликован несколько раз. Я прошел почти каждый вопрос & Я попробовал почти все предлагаемое решение этой проблемы. Но по какой-то причине он не работает. Я решил опубликовать свою проблему здесь, проведя 3 дня по той же проблеме.
Я был бы очень признателен, если бы кто-то указал, где именно я ошибаюсь.
Параметр 'redirect_uri' должен быть указан при обмене« кодом »на токен (и должен быть таким же, как указано ранее в диалоговом окне входа в систему). Я предполагаю, что, поскольку вы используете «новый FacebookFactory(). GetInstance()» во втором методе, это не так. Взгляните на основную реализацию здесь: https://github.com/roundrop/facebook4j-oauth-example/tree/master/src/main/java/facebook4j/examples/signin - в 'SignInServlet',' Facebook' экземпляр объекта сохраняется в сеансе, а затем в 'CallbackServlet' тот же экземпляр извлекается и используется снова. – CBroe
Да, это точно. Я использовал 2 экземпляра facebook4j.Facebook и второй раз я не устанавливал redirect_uri. Я думаю, что это было бы полезно для других, если вы добавите свой комментарий в качестве ответа. Благодарю. – ameykpatil