我正在制作一个托管在 heroku 上的 Facebook 画布应用程序。对于身份验证,我将 devise gem 与 omniauth-facebook gem 一起使用。
目前,当应用程序打开时,它会要求您使用您的电子邮件和密码“登录”,或单击“使用 Facebook 登录”按钮。
我希望跳过此页面,当用户加载应用程序时,它应该自动对它们进行身份验证。
我怎样才能做到这一点?
我正在制作一个托管在 heroku 上的 Facebook 画布应用程序。对于身份验证,我将 devise gem 与 omniauth-facebook gem 一起使用。
目前,当应用程序打开时,它会要求您使用您的电子邮件和密码“登录”,或单击“使用 Facebook 登录”按钮。
我希望跳过此页面,当用户加载应用程序时,它应该自动对它们进行身份验证。
我怎样才能做到这一点?
如果您的 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 值。如果它不存在,您可以添加一些代码将它们重定向到登录表单。