Renew visit cookie for events

Andrew committed Feb 27, 2018
commit dc33ac3459970cb325ed73074b637163b4726b8a
Showing 3 changed files with 16 additions and 11 deletions
app/controllers/ahoy/base_controller.rb +9 -2
@@ @@ -5,11 +5,11 @@ module Ahoy
skip_before_action(*filters, raise: false)
skip_after_action(*filters, raise: false)
skip_around_action(*filters, raise: false)
- before_action :verify_request_size
else
skip_action_callback *filters
- before_action :verify_request_size
end
+ before_action :verify_request_size
+ before_action :renew_cookies
if respond_to?(:protect_from_forgery)
protect_from_forgery with: :null_session, if: -> { Ahoy.protect_from_forgery }
@@ @@ -21,6 +21,13 @@ module Ahoy
@ahoy ||= Ahoy::Tracker.new(controller: self, api: true)
end
+ # set proper ttl if cookie generated from JavaScript
+ # approach is not perfecr, as user must reload the page
+ # for new cookie settings to take effect
+ def renew_cookies
+ set_ahoy_cookies if params[:js] && !Ahoy.api_only
+ end
+
def verify_request_size
if request.content_length > Ahoy.max_content_length
logger.info "[ahoy] Payload too large"
app/controllers/ahoy/visits_controller.rb +0 -3
@@ @@ -3,9 +3,6 @@ module Ahoy
def create
ahoy.track_visit
- # set proper ttl if cookie generated from JavaScript
- set_ahoy_cookies if params[:js] && !Ahoy.api_only
-
render json: {
visit_token: ahoy.visit_token,
visitor_token: ahoy.visitor_token,
vendor/assets/javascripts/ahoy.js +7 -6
@@ @@ -357,10 +357,6 @@ function createVisit() {
log("Active visit");
setReady();
} else {
- if (track) {
- destroyCookie("ahoy_track");
- }
-
if (!visitId) {
visitId = generateId();
setCookie("ahoy_visit", visitId, visitTtl);
@@ @@ -392,7 +388,11 @@ function createVisit() {
log(data);
- sendRequest(visitsUrl(), data, setReady);
+ sendRequest(visitsUrl(), data, function () {
+ // wait until successful to destroy
+ destroyCookie("ahoy_track");
+ setReady();
+ });
} else {
log("Cookies disabled");
setReady();
@@ @@ -431,7 +431,8 @@ ahoy.track = function (name, properties) {
name: name,
properties: properties || {},
time: new Date().getTime() / 1000.0,
- id: generateId()
+ id: generateId(),
+ js: true
};
ready(function () {