使用Devise

时间:2017-05-13 06:55:31

标签: ruby-on-rails devise strong-parameters mixpanel

我正在使用带有Rails 5.1的Devise 4.2.1。我们的应用程序使用MixPanel的JavaScript库,在匿名网站访问者浏览时为其提供唯一ID。

当用户创建帐户时,我们会将他们的匿名ID链接到我们数据库中的已知用户ID。我们通过在注册表单的隐藏字段中插入用户的匿名mixpanel_id,并将其与其他注册数据一起发布到Devise的注册控制器来执行此操作:

= vertical_form_for(resource, as: resource_name, url: registration_path(resource_name) do |f|
  = f.input :name
  = f.input :email
  = f.input :password
  = f.input :mixpanel_id, as: :hidden, input_html: { value: '' }

:javascript
  after_load_once(function () {
    mixpanel_promise.then(function (mixpanel) {
      var id = mixpanel.get_distinct_id();
      $('#user_mixpanel_id').val(id);
    });
  });

然后我们覆盖Devise中的create方法:

class RegistrationsController < Devise::RegistrationsController
  def create
    super

    if resource.valid?
      $mixpanel.alias(resource.id, params[:user][:mixpanel_id]) if params[:user][:mixpanel_id]
    end
  end
end

这似乎对我们没用。人们确实是联系在一起的,我们可以通过网站跟踪他们的行为,虽然我注意到一些人们没有正确链接的奇怪行为。今天在调查时我注意到了日志中的一些内容:Unpermitted parameter: :mixpanel_id

我查看了强参数,但由于:mixpanel_id不是用户的存储属性,我不知道如何在此处将其添加为允许参数:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end
end

1 个答案:

答案 0 :(得分:1)

  

未经许可的参数:: mixpanel_id

     

我研究了强参数,但因为:mixpanel_id不是   存储在用户身上的属性,我不确定如何将其添加为   允许参数在这里

您可以通过将attr_accessor :mixpanel_id添加到User模型

来执行此操作
Class User < ActiveRecord::Base
  attr_accessor :mixpanel_id
end

并允许它在强参数

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :mixpanel_id])
end