通过OmniAuth传递参数

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"]中,您需要使用引号而不是符号.

  • 这是omniauth的一个重要功能,可耻的是它没有得到更好的记录。 (2认同)
  • 这应该标记为正确的答案 (2认同)

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']以获取哈希值!:)

(从这个答案复制)


jef*_*unt 7

您要做的是动态设置回调以在每个身份验证事务的基础上在url(而不是 url参数)中包含合作伙伴名称,具体取决于所涉及的合作伙伴.这意味着为每个身份验证请求动态设置回调URL.请参阅此博客文章以开始使用.正如您所注意到的,回调网址会自动删除网址参数,因此使用参数执行此操作将无效.

因此,如果不是尝试将伙伴名称/ id作为参数传递(被删除),而是构建路由以便partner_idOmniAuth和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


Dav*_*les 6

OmniAuth已经有一种内置的方式来了解用户的位置,它被称为"origin",如下所示:

https://github.com/intridea/omniauth/wiki/Saving-User-Location