2011-01-26 187 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