【问题标题】:How to integrate mixpanel-ruby with Devise?如何将 mixpanel-ruby 与 Devise 集成?
【发布时间】:2023-03-13 08:19:01
【问题描述】:

我正在努力将 mixpanel-ruby 与 Devise 集成。我有一个初学者问题,我应该在哪个函数中包含跟踪逻辑?

例如,为了跟踪成功登录,我应该覆盖SessionsController#create 还是after_sign_in_path_for(resource)

如果覆盖创建,我应该在create 函数中插入代码还是以某种方式利用block

  def create
    self.resource = warden.authenticate!(auth_options)
    set_flash_message(:notice, :signed_in) if is_flashing_format?
    sign_in(resource_name, resource)
    yield resource if block_given?
    <<< insert mixpanel tracking code >>>
    respond_with resource, location: after_sign_in_path_for(resource)
  end

【问题讨论】:

    标签: ruby-on-rails-3 devise mixpanel


    【解决方案1】:

    您提出的任何方法都可以。哪种方法最好是一个见仁见智的问题,很大程度上取决于您和您的团队的偏好。跟踪代码所需的参数也可能表明一种方法比另一种方法更可取。

    也就是说,这就是我的想法:

    • 我不建议覆盖after_sign_in_path_for(resource)。我会考虑在您希望返回的 url 有点像 side effect 的方法之上添加 mixpanel 跟踪,这是我想避免的。

    • 对我来说稍微好一点的是覆盖SessionsController#create,因为我发现在这里添加跟踪行为并不令人惊讶。这可能是一些变化:

      class YourController < Devise::SessionsController
        def create
          super
          track_sign_in(this.resource) if signed_in?
        end
      
        # or taking advantage of the block
        def create
          super do |resource|
            track_sign_in(resource) if signed_in?
          end
        end
      
        private
        def track_sign_in(resource)
          # yada yada
        end
      end
      
    • 总的来说,我更喜欢使用过滤器,因为我认为这是在控制器操作之上添加切向行为的更自然的方式。

      class YourController < Devise::SessionsController
        # or after_action in Rails 4+
        after_filter :track_sign_in 
      end
      

    任何解决方案都涉及覆盖 Devise 提供的某些方面,因此在我看来,选项之间的差异非常微不足道。

    【讨论】:

      【解决方案2】:

      你也可以使用 Warden 的 after_set_user 钩子。文档状态:

      设置为在每次设置用户后运行的回调挂钩。这 回调在这三个事件之一第一次发生时触发 在请求期间::authentication, :fetch (from session) 和 :set_user (手动设置时)。您可以提供任意数量的挂钩,并且 它们将按照声明的顺序运行。

      这是如何工作的。注意对事件的检查:

      Warden::Manager.after_set_user do |record, warden, options|
        if options[:event] == :authentication
          # Do authentication things
        end
      end
      

      更多信息在这里:http://www.rubydoc.info/github/hassox/warden/Warden/Hooks:after_set_user

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-18
        • 2012-10-14
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多