1

我在我的 Rails 应用程序中使用 oauth gem。

gem 'omniauth-facebook', '1.4.0'
gem "omniauth-google-oauth2"

Facebook 客户端身份验证工作正常。我跟着,

http://railscasts.com/episodes/360-facebook-authentication

谷歌的客户端身份验证不起作用,或者我无法处理它。

我看到这个咖啡脚本负责 facebook 客户端身份验证,

jQuery ->
  $('body').prepend('<div id="fb-root"></div>')

  $.ajax
    url: "#{window.location.protocol}//connect.facebook.net/en_US/all.js"
    dataType: 'script'
    cache: true


window.fbAsyncInit = ->
  FB.init(appId: 145280228983243, cookie: true)

  $('#sign_in').click (e) ->
    e.preventDefault()
    FB.login (response) ->
      window.location = '/auth/facebook/callback' if response.authResponse

  $('#sign_out').click (e) ->
    FB.getLoginStatus (response) ->
      FB.logout() if response.authResponse
    true

谷歌客户端身份验证应该怎么做?

我只想当用户点击“用谷歌登录”时出现一个弹出窗口并询问用户 ID 和密码,在询问之前,它应该检查用户信息是否已经在浏览器上可用(客户端) 如果可用,不要提示输入用户 ID 和密码,继续登录。

4

1 回答 1

1

我有同样的问题,似乎omniauth-google-oauth2不像facebook gem那样支持客户端身份验证。

在构建 access_token 时,omniauth-facebook gem 会检查签名请求是否存在以及是否有效,然后它使用 request.params 或 cookie 提供的 access_token。否则,它会使用提供的授权码从 Facebook 查询 access_token。

omn​​iauth-google-oauth2 gem 只执行第二个操作,因为 redirect_uri 在初始和验证请求中必须相同,因此您不能以这种方式使用 gem 的当前版本。

我找到了一个叉子https://github.com/pivotal-geotellar/omniauth-google-oauth2/tree/client_login示例http://pivotallabs.com/facebook-and-googleplus-javascript-sdk-sign-in -with-devise-ror/但是从 request.params 读取 access_token 而不在服务器端验证它是不安全的。

更新

我找到了一种通过 id_token 验证 access_token 的方法,并向 gem https://github.com/zquestz/omniauth-google-oauth2/pull/50发出拉取请求

于 2013-04-13T14:49:39.513 回答