私は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
伝説にそれを許可します!ありがとうございました。それが私が欠けていたものです。 –