2011-01-26 218 views
25

我已經爲Devise和Omniauth的Rails應用程序設置了用戶身份驗證。 現在我想知道我應該從哪裏開始爲我想創建的Android和iPhone應用使用相同的身份驗證。設計Omniauth和Iphone/Android應用程序

我應該使用my/auth/facebook的移動版本還是應該直接從應用程序發送請求?

這是一個相當普遍的問題,但我找不到。

編輯:我剛剛添加令牌身份驗證到應用程序使用RESTful api,我只是錯過了Omniauth/Facebook令牌部分。

+0

我有Facebook的SDK建立在我的Android應用程序,但它似乎我回來的令牌與我在rails應用數據庫中的令牌不一樣,所以我無法將它們與auth用戶進行比較?! – rnaud 2011-01-31 21:32:16

回答

36

好吧,我正在回答我自己的問題。

如果您使用Facebook SDK,SSO在設備上運行得非常好,但是,您收到的令牌與您在Rails應用中收到的令牌不一樣。顯然,Facebook根據支持創建了不同的令牌。

所以我所做的就是:有一次,我收到了Android設備上的令牌,我把它發送給我的軌道通過網址應用:

http://myapp/check_mobile_login?token=FB_MOBILE_TOKEN 

然後,這是我的應用程序控制器,它使用的抓使用fb_graph gem的令牌獲取用戶數據。如果令牌有效,我將收到一些信息。然後我檢查我的數據庫,並且如果我找到相同的UID,那麼我的用戶通過驗證,並且我將他從Devise發回給Authentificable_token。

和代碼草案:

def check_mobile_login 
     token = params[:token] 

     user = FbGraph::User.me(token) 
     user = user.fetch 

     logged = User.find_by_uid(user.identifier) 

     respond_to do |format| 
      format.html # index.html.erb 
      format.json { render :json => logged.authentication_token } 
     end 
    end 

如果任何人有一個更好的解決方案,我會很高興地聽到,:)

+0

嗨,我試圖做同樣的事情,我想知道你到底在哪裏「sign_in」來設計,以便在你的Rails應用裏面生成authentication_token? – refaelos 2012-04-28 21:29:39