2012-06-17 27 views
12

我目前正在使用rails後端構建iPhone應用程序。我在iPhone上使用了Facebook的單點登錄(SSO),並且驗證在客戶端非常好。我在rails上使用devise作爲後端。來自Facebook的使用Access_token的Rails身份驗證

注意我已經諮詢Design for Facebook authentication in an iOS app that also accesses a secured web service已經

我看能想出有一些所謂的token_authenticable基本上是在該線程的步驟5所述的「入場券」。這是當前流動我看到

  1. 用戶登錄Facebook的SSO在手機上
  2. 用戶打電話一起myserver.com/sessions/fb_sso {的access_token:X}
  3. 在服務器端(在SessionsController#fb_sso,我將作出API調用與的access_token給Facebook
  4. 如果的access_token是有效的,檢查用戶是否在數據庫中存在。如果用戶不存在,創建一個新用戶
  5. 現在我們可以返回{ user_id:X,devise_auth_token:Y}回到呼叫1)

這很簡單。然而,我有幾個問題:

  1. 使用devise_auth_token,這是否意味着我不再需要從設計中調用sign_in(「user」,resource)? (在這裏找到http://jessewolgamott.com/blog/2012/01/19/the-one-with-a-json-api-login-using-devise/
  2. 哪裏會把代碼放在3-4的最佳位置?
  3. 我似乎無法在Google上找到關於此主題的很多內容。爲什麼在那裏有那麼幾個教程,這個過程非常普遍?我錯過了明顯的東西嗎?
+2

您使用的是Omniauth寶石爲Facebook連接?結合設計和omniauth照顧3和4給你! – MBHNYC

+0

@MBHNYC:糾正我,如果我錯了,但這只是當用戶通過網站登錄的情況下。在OP的情況下,用戶通過iPhone應用程序登錄。該網站沒有看到流量。 –

+0

是的,但是你仍然將相同的信息傳遞給Facebook,並且可以修改回調以不呈現任何視圖(或任何iOS應用需求),如果生成/覆蓋所有設備+ omniauth控制器/視圖, OP應該有所有的編程工具來滿足這個要求。 – MBHNYC

回答

0

您必須在服務器和ios客戶端上使用相同的令牌。一個簡單的解決方案是將所有邏輯放在服務器端,通過設備+ omniauth,iOS只處理UI和服務器端的響應。 如果你想從iOS獲得令牌,就像使用facebook iOS SDK一樣,你應該將令牌告訴服務器端,但看起來並不安全。

1

爲什麼不能使用omniauth-facebook gem。如果你使用它的潛力,它將是一個非常簡單的獲取訪問令牌的解決方案。確保您需要在不同的登錄時間獲得不同的訪問令牌。

你可以通過這個鏈接https://github.com/pramodv-nyros/social-login-in-rails