【问题标题】:Devise Omniauth and Iphone/Android App设计 Omniauth 和 Iphone/Android 应用程序
【发布时间】:2011-01-26 20:10:04
【问题描述】:

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

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

这是一个很笼统的问题,但我发现无处可看。

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

【问题讨论】:

  • 我在我的 Android 应用程序中设置了 Facebook SDK,但我返回的令牌似乎与我在 Rails 应用程序数据库中的令牌不同,因此我无法将它们与我的用户进行身份验证?!

标签: iphone android ruby-on-rails devise omniauth


【解决方案1】:

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

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

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

【讨论】:

  • 嗨,我正在尝试做同样的事情,我想知道你究竟在哪里“登录”来设计,以便在你的 Rails 应用程序中生成 authentication_token?
  • 将 :token_authenticatable 添加到您的用户模型中的设计声明中,然后每个新用户都会获得一个“authentication_token”,您可以使用它来登录您的下一个请求。
  • 是的,但如果令牌过期,您必须“登录”才能重新生成令牌。您还必须“登录”用户才能成为 current_user。
  • github.com/SoapSeller/omniauth-facebook-access-token 可能对任何谷歌用户都有用。它似乎遵循相同的omniauth模式,但允许在对服务器的回调中使用access_token并让服务器检索用户详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 2011-04-03
  • 2020-12-16
相关资源
最近更新 更多