使用Omniauth,如何记录所有身份验证请求?

时间:2013-08-20 00:32:00

标签: ruby-on-rails ruby-on-rails-3 omniauth

在我的应用中使用omniauth,让用户使用Google oAuth2进行身份验证我将用户重定向到:

/users/auth/google_oauth2

如果用户批准了请求,则调用AuthenticationsController #create。

使用AuthenticationsController #create - 我可以添加事件跟踪来记录批准google身份验证的用户数量。我没有的是我发送批准的数字意味着我没有转换率。

如何跟踪发出连接请求的网址的人数。

2 个答案:

答案 0 :(得分:0)

一个讨厌的解决方案是围绕方法Strategy#request_call构建一个过滤器并在那里进行跟踪。

在初始化程序中:

OmniAuth::Strategy.class_eval do
  def request_call_with_tracking
    log :info, "Im running before the actual request_call"
    Tracker.hit(name) #name will return the provider
    request_call_without_tracking
  end
  alias_method_chain :request_call, :tracking
end

答案 1 :(得分:0)

您可以使用OmniAuth设置阶段来实现此目的。您可以将:setup选项传递给OmniAuth提供程序,并在执行身份验证之前执行proc。您可以在此过程中添加事件跟踪。

因此,如果你有一些跟踪器类,你可以这样做:

use OmniAuth::Builder do
  provider :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'],
    :setup => lambda { |env|
      Tracker.track
    }
end

有关详细信息,请查看Avdi Grimm's great blog post about the subject