2012-10-04 39 views
0

我跟着guide provided here by Sorcery瞭解如何使用Facebook來處理用戶登錄。如何使用帶有魔法寶石的Facebook JavaScript SDK

# callback method called by Facebook after getting the authorization by the user 
if user = login_from(provider) # provider == "facebook" 
    redirect_to root_path #, :notice => "Logged in from #{provider.titleize}!" 
else 
    begin 
    user = create_from(provider) 
    ... 

但是,它只需要我的用戶離開我的網站前往Facebook頁面,然後在這裏重定向。

我想實現的是當我在頁面中使用Facebook JavaScript SDK時看到的一個乾淨的彈出窗口。要做到這一點我也跟着tutorial on Railscasts

$('#sign_in').click (e) -> 
    e.preventDefault() 
    FB.login (response) -> 
    window.location = '/auth/facebook/callback' if response.authResponse 

然而,authResponse只包含一個accessTokensignedRequestuserid而法術需要一個code

有沒有辦法正確地做到這一點(或使用accessToken得到code?)。

回答

1

但是,authResponse只包含accessToken,signedRequest和userid,而Sorcery需要代碼。

無論如何要正確地做到這一點(或使用accessToken獲取代碼?)。

在服務器側流,所述code只是一個中間步驟在得到訪問令牌 - 應用程序得到的代碼,交流訪問令牌代碼。

由於在客戶端流程中,您已經在獲得訪問令牌 - 它沒有得到任何比它更「適當」的訪問令牌。

所以,你有兩個選擇:

  • 要麼重構你的巫術的thingie,從而跳過它得到一個代碼與交流,對於一個訪問令牌,並直接步驟「設置」訪問在得到它之後標記自己(無論哪個巫師可能希望它被設置);或

  • 堅持服務器端的流程,但你自己打開一個彈出窗口。然後你仍然會得到代碼,但你會在彈出窗口中看到它。所以你必須關閉彈出窗口,然後自己重​​新加載原來的窗口。

+0

是的,那正是我想到的。最簡潔的方法是分叉魔法寶石並調整它,因爲它不會觸發彈出警告(並且看起來更好)。我已經看過了代碼,它不應該太難。謝謝 – mbillard

+0

我跟着你的第一個建議去了,把gem分叉了,並修改它以接受'access_token':https://github.com/coachoasis/sorcery謝謝! – mbillard