syn*_*pse 54 ruby-on-rails omniauth
我需要将一些参数传递给回调动作.从源代码来看,OmniAuth应该将查询字符串添加到回调URL,但奇怪的是它没有.当我打开
/auth/facebook?from=partner
Run Code Online (Sandbox Code Playgroud)
...并被重定向到Facebook,return_url
只是
/auth/facebook/callback
Run Code Online (Sandbox Code Playgroud)
......没有任何参数.
nfr*_*d21 77
在努力解决上述所有问题之后,我想出了如何处理关于Facebook的问题,默认情况下不会显示这些问题request.env["omniauth.auth"]
.
所以 - 如果您使用查询字符串进行回调,类似于以下内容:
"/auth/facebook?website_id=#{@website.id}"
Run Code Online (Sandbox Code Playgroud)
获取该website_id参数的唯一方法是使用request.env["omniauth.params"]
.注意:请确认你使用omniauth.params而不是omniauth.auth - 这个让我绊倒了一段时间.
然后,为了测试它,你可以在你的控制器动作中检查它(注意RAISE线......):
def create
raise request.env["omniauth.params"].to_yaml
# the rest of your create action code...
end
Run Code Online (Sandbox Code Playgroud)
你应该在那里看到你的参数.大.现在,返回您的控制器并删除该RAISE线.然后,您可以在控制器操作中按如下方式访问参数:
params = request.env["omniauth.params"]
website_id = params["website_id"]
Run Code Online (Sandbox Code Playgroud)
注意:在params ["website_id"]中,您需要使用引号而不是符号.
use*_*245 22
我想cookie的作用是有效的,但是为什么要使用状态变量,如下所示:https://github.com/mkdynamic/omniauth-facebook
这就是我使用它的方式:
在创建URL时,您只需在查询字符串中添加状态,它也可以在回调URL中使用.
user_omniauth_authorize_path(:facebook, :display => 'page', :state=>'123') %>
Run Code Online (Sandbox Code Playgroud)
现在回调网址将是
http://localhost:3000/users/auth/facebook/callback?state=123&code=ReallyLongCode#_=_
Run Code Online (Sandbox Code Playgroud)
现在在回调处理程序中,您可以处理状态
Nim*_*imo 12
您可以使用:params
选项,如
omniauth_authorize_path(:user, :facebook, var: 'value', var2: 'value2' )
Run Code Online (Sandbox Code Playgroud)
然后在回调中你可以访问request.env['omniauth.params']
以获取哈希值!:)
(从这个答案复制)
您要做的是动态设置回调以在每个身份验证事务的基础上在url(而不是 url参数)中包含合作伙伴名称,具体取决于所涉及的合作伙伴.这意味着为每个身份验证请求动态设置回调URL.请参阅此博客文章以开始使用.正如您所注意到的,回调网址会自动删除网址参数,因此使用参数执行此操作将无效.
因此,如果不是尝试将伙伴名称/ id作为参数传递(被删除),而是构建路由以便partner_id
OmniAuth和provider
回调网址成为回调网址的一部分,那么您将拥有以下内容:
/auth/:omniauth_provider/callback/:partner_id
Run Code Online (Sandbox Code Playgroud)
...有效的回调会是什么样的
/auth/facebook/callback/123456
Run Code Online (Sandbox Code Playgroud)
...然后你会知道给定的回调来自facebook,伴侣ID 123456
OmniAuth已经有一种内置的方式来了解用户的位置,它被称为"origin",如下所示:
https://github.com/intridea/omniauth/wiki/Saving-User-Location