0

我正在开发一个应用程序,我想让用户使用她的 Facebook 帐户登录。我正在使用 RestFB(restfb.com)。到目前为止,我可以使用下面的代码访问 Facebook 身份验证 API,该代码执行没有问题:

try {
 FacesContext.getCurrentInstance().getExternalContext().redirect(FB_URL);
 } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
 }

FB_URL 包括我的redirect_url,它在用户身份验证后被正确重定向。身份验证返回一个代码。我想使用返回的代码发送对ACCESS_TOKEN. 我认为最好的方法是在返回 URL 中包含一个要执行的方法。只要对 facebook 的请求与代码响应一起返回,就会执行此方法。我还认为这只有在我可以从 URL 执行操作方法的情况下才有可能。我读过一些关于使用过滤器的东西,但还不清楚。任何帮助将不胜感激。

4

1 回答 1

0

我找到了一种方法来做到这一点。使用

<f:metadata>
    <f:viewParam name="code" value="#{loginBean.fbCode}" />
</f:metadata>

LoginBean 的 setFbCode 被执行。然后,我将此代码合并到用于检索访问令牌的 URL 中,如下所示:

if(this.fbCode != "") {
        TOKEN_URL = TOKEN_URL + fbCode + "&access_token=";
        System.out.println("FB Code = " + fbCode);
        try {
                        FacesContext.getCurrentInstance().getExternalContext().redirect(TOKEN_URL);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

并检索令牌:

URL url = new URL(TOKEN_URL);
String token = IOUtils.toString(url.openStream());
this.fbAccessToken = token;

当然包围在一个 try-catch 块中。它使用 Apache 的 IOUtils 将令牌读入字符串。

于 2012-05-29T13:51:11.183 回答