我已经使用Devise和Omniauth为我的Rails应用程序设置了用户认证。
现在我想知道如何在我要创建的Android和iPhone应用程序中使用相同的认证。
我应该使用我的/auth/facebook的移动版本,还是直接从应用程序发送请求?
这是一个非常普遍的问题,但我找不到任何可以参考的地方。
编辑:我刚刚向应用程序添加了令牌认证以与RESTful API一起使用,我只是缺少Omniauth / Facebook-token部分。
好的,我来回答自己的问题。
如果你使用Facebook SDK,那么单点登录在设备上运行得非常好,但是,你所收到的令牌与你在Rails应用程序中将要收到的令牌不同。 显然,Facebook根据支持情况创建不同的令牌。
因此,我所做的是:一旦我在Android设备上接收到令牌,我会通过URL将其发送到我的Rails应用程序:
http://myapp/check_mobile_login?token=FB_MOBILE_TOKEN
这段代码会被我的应用控制器捕获,并使用fb_graph gem中的Token获取用户数据。如果Token有效,我将收到一些信息。然后我检查我的数据库,如果我找到相同的UID,则我的用户已经通过验证,我将向他发送Devise的认证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
如果有更好的解决方案,我很乐意听取 :)