能够在Omniauth支持的Facebook身份验证请求上传递自定义数据

时间:2012-03-26 19:19:53

标签: facebook omniauth

Omniauth分支0-3-稳定的git://github.com/intridea/omniauth.git Rails 3.0.7

当Omniauth通过对“/ auth / facebook”进行GET调用将用户重定向到Facebook身份验证对话框时,如果该用户从身份验证对话框中单击“取消”,那么我们可以进行回调请求

GET "/auth/facebook/callback?error_reason=user_denied&error=access_denied&error_description=The+user+denied+your+request." 

Omniauth立即出现重定向到:

GET "/auth/failure?message=invalid_credentials"

不幸的是,这是对应用的回应。 FB请求对话框生成的邀请,没有关于哪个用户在auth对话框中“已取消”的识别信息。如果我们可以通过Omniauth请求发送一些识别信息,我们可以让自己“记住”哪个用户执行了“取消”,这将有助于我们跟踪后端的明确拒绝。

有没有办法通过调用“/ auth / facebook”发送数据,这些数据只会在调用“/ auth / facebook / callback”时重复回复给我们?这与请求对话框文档中的“data”参数类似。

谢谢, 韦斯

1 个答案:

答案 0 :(得分:4)

您可以传递一个“状态”参数,该参数将传递给回调网址。

例如。你打电话给'/ auth / facebook?state = SOME_INFO'

然后在您将'/ auth / facebook / callback'路由到的控制器操作中,您将检索正常的参数:

info = params [:state]

该参数必须命名为“州”。这在omniauth-facebook文档的“Per-Request Options”部分中提到。 https://github.com/mkdynamic/omniauth-facebook