2017-05-13 5 views
0

Ich verwende Devise 4.2.1 mit Rails 5.1. Unsere App verwendet MixPanels JavaScript-Bibliothek, die anonymen Website-Besuchern eine eindeutige ID gibt, wenn sie sich umsehen.Weitergabe von beliebigen Parametern bei der Benutzerregistrierung mit Devise

Wenn ein Benutzer ein Konto erstellt, verknüpfen wir seine anonyme ID mit seiner bekannten Benutzer-ID in unserer Datenbank. Wir tun dies, indem Sie auf dem Anmeldeformular der Benutzer über den anonymen mixpanel_id in einem versteckten Feld einfügen, und es zusammen mit den anderen Anmeldedaten zu ersinnen Registrierungen Controller Posting:

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

Dann haben wir das Verfahren in Devise erstellen außer Kraft setzen:

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 

Dies scheint für uns in Ordnung zu sein. Die Leute sind in der Tat verbunden und wir können ihr Verhalten direkt auf der Website verfolgen, obwohl ich ein merkwürdiges Verhalten bemerkt habe, bei dem Leute nicht richtig verknüpft wurden. Während heute die Untersuchung bemerkte ich etwas in den Protokollen: Unpermitted parameter: :mixpanel_id

ich in starke Parameter gesucht, aber da :mixpanel_id auf dem Benutzer keine gespeicherte Attribut ist, ich bin nicht sicher, wie ich es als zulässig Parameter hier hinzufügen:

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 

Antwort

1

Unzulässige Parameter: mixpanel_id

ich in starke Parameter gesucht, aber da: mixpanel_id ist kein gespeichert Attribut auf dem Benutzer, ich bin nicht sicher, wie ich es als einhinzufügenerlaubt Parameter hier

du

Class User < ActiveRecord::Base 
    attr_accessor :mixpanel_id 
end 

durch Zugabe von attr_accessor :mixpanel_id zu Ihrem User Modell tun konnte, und ermöglicht es in den starken Parameter

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

Legende! Vielen Dank. Das habe ich vermisst. –

Verwandte Themen