2012-05-28 161 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將令牌讀入字符串。