2013-04-14 3 views
0

Я новичок в JAVA и использую фреймворк для создания веб-сайта. Я пытаюсь интегрировать Facebook oauth на свой сайт. Код, который у меня есть:Facebook OAuth Исключение: redirect_uri отсутствует

// This function is called to populate _facebook, _facebookAuthParams and 
// _facebookTokenParams. The first two are HashMaps and _facebookTokenParams is 
// ObjectNode 
private static void _initFacebook() { 

    String _url = "shutterdeck.com:8080"; 

    _facebook.put("authUrl", "https://graph.facebook.com/oauth/authorize"); 
    _facebook.put("tokenUrl", "https://graph.facebook.com/oauth/access_token"); 
    _facebookAuthParams.put("scope", "email"); 
    _facebookAuthParams.put("responseType", "code"); 
    _facebookAuthParams.put("redirect_uri", _url + "/oauth/facebookRedirect"); 
    _facebookAuthParams.put("client_id", ".."); 
    _facebookTokenParams.put("grant_type", "authorization_code"); 
    _facebookTokenParams.put("redirect_uri", _url + "/oauth/facebookRedirect"); 
    _facebookTokenParams.put("scope", "email"); 
    _facebookTokenParams.put("client_id", "..."); 
    _facebookTokenParams.put("client_secret", "..."); 
} 

ниже функция пытается принести access_token от Facebook:

public static Result facebookRedirect() { 
    Map<String, String[]> query = request().queryString(); 
    if (query.containsKey("code")) { 
     String[] value = query.get("code"); 
     String code = value[0]; 
     if (value.length > 1 || code.isEmpty()) 
      return redirect("/"); 

     String tokenUrl = _getTokenUrl(_facebook); 
     _facebookTokenParams.put("code", code); 
     Promise<WS.Response> promise = WS.url(tokenUrl).post(_facebookTokenParams); 
     Function<WS.Response, Result> f = new Function<WS.Response, Result>() { 
      public Result apply(WS.Response response) { 
        System.out.println(response.asJson()); // This prints an error json from face book 
        String token = response.asJson().get("token").asText(); 
        _getFacebookUserInfo(token); 
        return ok("/"); 
      } 
     }; 
     return async(promise.map(f)); 
    } 
    return ok("404"); 
} 

ошибка, которую я получаю от Facebook является:

{"error":{"message":"Missing redirect_uri parameter.","type":"OAuthException","code":191}} 

Я подтвердил, что redirect_url присутствует в _facebookTokenParams, который передается в post. Что может быть что-то, чего я здесь не хватает? Кроме того, как я могу просмотреть POST request, который отправляется на Facebook?

ответ

0

Вы должны передать параметры в querystring.

1

По какой-то причине конечная точка API графического интерфейса Facebook хочет, чтобы мы передавали параметры client_id, client_secret и grant_type в URL как параметры, закодированные по URL. Это означает отсутствие пробелов в файле grant_type - только одна запятая между учетными данными!

Смежные вопросы