2017-05-13 11 views
0

私はDevises 4.2.1とRails 5.1を使用しています。私たちのアプリはMixPanelのJavaScriptライブラリを使用しており、匿名のウェブサイト訪問者に閲覧時に一意のIDを与えます。ユーザ登録時に任意のパラメータをDeviseに渡す

ユーザーがアカウントを作成すると、その匿名IDがデータベースの既知のユーザーIDにリンクされます。私たちは、登録フォームの隠しフィールドにユーザーの匿名mixpanel_idを挿入し、考案者の登録コントローラに、他のサインアップのデータとそれを一緒に掲載することにより、次の操作を行います。

= 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); 
    }); 
    }); 

その後、我々は工夫で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

許可されていないパラメータ:mixpanel_id

私は強いパラメータに見えたが、理由:mixpanel_idは、私はとして追加することができますかわからない、ユーザーの 保存された属性ではありませんは、あなたのUserモデル

Class User < ActiveRecord::Base 
    attr_accessor :mixpanel_id 
end 

attr_accessor :mixpanel_id追加することによって、ここに

あなたがこれを行うことができ、パラメータを許可し、強力なパラメータ

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

伝説にそれを許可します!ありがとうございました。それが私が欠けていたものです。 –

関連する問題