我已经使用 Devise 和 Omniauth 为我的 rails 应用程序设置了用户身份验证。现在我想知道我应该从哪里开始对我想要创建的 Android 和 iPhone 应用程序使用相同的身份验证。
我应该使用 /auth/facebook 的移动版本还是应该直接从应用程序发送请求?
这是一个非常普遍的问题,但我发现无处可看。
编辑:我刚刚将 Token Auth 添加到应用程序以与 RESTful api 一起使用,我只是缺少 Omniauth/Facebook-token 部分。
我已经使用 Devise 和 Omniauth 为我的 rails 应用程序设置了用户身份验证。现在我想知道我应该从哪里开始对我想要创建的 Android 和 iPhone 应用程序使用相同的身份验证。
我应该使用 /auth/facebook 的移动版本还是应该直接从应用程序发送请求?
这是一个非常普遍的问题,但我发现无处可看。
编辑:我刚刚将 Token Auth 添加到应用程序以与 RESTful api 一起使用,我只是缺少 Omniauth/Facebook-token 部分。
好的,所以我正在回答我自己的问题。
如果您使用Facebook SDK,SSO 在设备上运行良好,但是,您收到的令牌与您将在 Rails 应用程序上收到的令牌不同。显然 Facebook 根据支持创建不同的令牌。
所以我所做的是:在 Android 设备上收到令牌后,我通过 url 将其发送到我的 rails 应用程序:
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
如果有人有更好的解决方案,我会很高兴听到这个:)