设计Omniauth和Iphone/Android应用程序

rna*_*aud 25 iphone android ruby-on-rails devise omniauth

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

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

这是一个相当普遍的问题,但我发现无处可寻.

编辑:我刚刚向应用程序添加了Token Auth以与RESTful api一起使用,我只是错过了Omniauth/Facebook-token部分.

rna*_*aud 36

好吧,所以我回答了我自己的问题.

如果您使用Facebook SDK,SSO在设备上运行良好,但是,您收到的令牌与您在Rails应用程序上收到的令牌不同.显然Facebook根据支持创建不同的令牌.

所以我做的是:一旦我在Android设备上收到令牌,我就会通过网址将它发送到我的rails应用:

http://myapp/check_mobile_login?token=FB_MOBILE_TOKEN
Run Code Online (Sandbox Code Playgroud)

然后由我的Application控制器捕获它,它使用带有fb_graph gem的Token来获取用户数据.如果令牌有效,我将收到一些信息.然后我检查我的数据库,如果我找到相同的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
Run Code Online (Sandbox Code Playgroud)

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