26

我已经使用 Devise 和 Omniauth 为我的 rails 应用程序设置了用户身份验证。现在我想知道我应该从哪里开始对我想要创建的 Android 和 iPhone 应用程序使用相同的身份验证。

我应该使用 /auth/facebook 的移动版本还是应该直接从应用程序发送请求?

这是一个非常普遍的问题,但我发现无处可看。

编辑:我刚刚将 Token Auth 添加到应用程序以与 RESTful api 一起使用,我只是缺少 Omniauth/Facebook-token 部分。

4

1 回答 1

38

好的,所以我正在回答我自己的问题。

如果您使用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

如果有人有更好的解决方案,我会很高兴听到这个:)

于 2011-02-01T14:05:27.710 回答