2012-05-28 164 views
0

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

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执行一个操作方法时才有可能。我已经阅读了关于使用过滤器的一些内容,但尚不清楚。任何援助将不胜感激。

回答

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将令牌读入字符串。