1

我正在制作一个托管在 heroku 上的 Facebook 画布应用程序。对于身份验证,我将 devise gem 与 omniauth-facebook gem 一起使用。

目前,当应用程序打开时,它会要求您使用您的电子邮件和密码“登录”,或单击“使用 Facebook 登录”按钮。

我希望跳过此页面,当用户加载应用程序时,它应该自动对它们进行身份验证。

我怎样才能做到这一点?

4

1 回答 1

1

如果您的 facebook 应用程序正在请求用户权限,并且他们已经授权,那么传递给您的 rails 应用程序的 signed_request 参数应该包含您需要的详细信息。所以你可以做的是解码参数,并从哈希本身中获取 facebook 用户 ID。

尝试这样的事情:

class ApplicationController

  before_filter :inspect_signed_request

protected
  def base64_url_decode(input)
    input += ('=' * (4 - input.length % 4) % 4)
    Base64.decode64(input.tr('-_', '+/'))
  end    
  def inspect_signed_request
    encoded_sig, payload = params[:signed_request].split('.', 2)

    # decode the data
    sig = base64_url_decode(encoded_sig)
    data = JSON.parse(self.class.base64_url_decode(payload))
    raise data.inspect
  end
end

这基本上会引发异常,向您显示签名请求的详细信息。本质上,您可以将其解析出来,然后检查签名的请求 FB ID 值。如果它不存在,您可以添加一些代码将它们重定向到登录表单。

于 2012-10-23T14:28:03.097 回答