antonioribeiro / tracker

Laravel Stats Tracker
MIT License
2.88k stars 599 forks source link

Getting userid null #479

Open wasifkarigar opened 4 years ago

wasifkarigar commented 4 years ago

Getting userid null after successful login

It was working fine before after upgrading laravel its logging users but storing userid to null.

Selection_020

System

Config:

` return [

/*
 * Enable it?
 */
'enabled' => true,

/*
 * Enable cache?
 */
'cache_enabled' => true,

/*
 * Deffer booting for middleware use
 */
'use_middleware' => true,

/*
 * Robots should be tracked?
 */
'do_not_track_robots' => false,

/*
 * Which environments are not trackable?
 */
'do_not_track_environments' => [
    // defaults to none
],

/*
 * Which routes names are not trackable?
 */
'do_not_track_routes' => [
    'tracker.stats.*',
],

/*
 * Which route paths are not trackable?
 */
'do_not_track_paths' => [
    'email/verify/*',

// 'login/*', ],

/*
 * The Do Not Track Ips is used to disable Tracker for some IP addresses:
 *
 *     '127.0.0.1', '192.168.1.1'
 *
 * You can set ranges of IPs
 *     '192.168.0.1-192.168.0.100'
 *
 * And use net masks
 *     '10.0.0.0/32'
 *     '172.17.0.0/255.255.0.0'
 */
'do_not_track_ips' => [
    //'127.0.0.0/24', /// range 127.0.0.1 - 127.0.0.255
],

/*
 * When an IP is not trackable, show a message in log.
 */
'log_untrackable_sessions' => true,

/*
 * Log every single access?
 *
 * The log table can become huge if your site is popular, but...
 *
 * Log table is also responsible for storing information on:
 *
 *    - Routes and controller actions accessed
 *    - HTTP method used (GET, POST...)
 *    - Error log
 *    - URL queries (including values)
 */
'log_enabled' => true,

/*
 * Log artisan commands?
 */
'console_log_enabled' => false,

/*
 * Log SQL queries?
 *
 * Log must be enabled for this option to work.
 */
'log_sql_queries' => false,

/*
 * If you prefer to store Tracker data on a different database or connection,
 * you can set it here.
 *
 * To avoid SQL queries log recursion, create a different connection for Tracker,
 * point it to the same database (or not) and forbid logging of this connection in
 * do_not_log_sql_queries_connections.
 */
'connection' => env('TRACKER_DB', 'tracker'),

/*
 * Forbid logging of SQL queries for some connections.
 *
 * To avoid recursion, you better ignore Tracker connection here.
 *
 * Please create a separate database connection for Tracker. It can hit
 * the same database of your application, but the connection itself
 * has to have a different name, so the package can ignore its own queries
 * and avoid recursion.
 *
 */
'do_not_log_sql_queries_connections' => [
    env('TRACKER_DB', 'tracker'),
],

/*
 * GeoIp2 database path.
 *
 * To get a fresh version of this file, use the command
 *
 *      php artisan tracker:updategeoip
 *
 */

//'geoip_database_path' => __DIR__.'/geoip', //storage_path('geoip'),
'geoip_database_path' => storage_path('geoip'),

/*
 * Also log SQL query bindings?
 *
 * Log must be enabled for this option to work.
 */
'log_sql_queries_bindings' => false,

/*
 * Log events?
 */
'log_events' => false,

/*
 * Which events do you want to log exactly?
 */
'log_only_events' => [
    // defaults to logging all events
],

/*
 * What are the names of the id columns on your system?
 *
 * 'id' is the most common, but if you have one or more different,
 * please add them here in your preference order.
 */
'id_columns_names' => [
    'id',
],
/*
 * Do not log events for the following patterns.
 * Strings accepts wildcards:
 *
 *    eloquent.*
 *
 */
'do_not_log_events' => [
    'illuminate.log',
    'eloquent.*',
    'router.*',
    'composing: *',
    'creating: *',
],

/*
 * Do you wish to log Geo IP data?
 *
 * You will need to install the geoip package
 *
 *     composer require "geoip/geoip":"~1.14"
 *
 * And remove the PHP module
 *
 *     sudo apt-get purge php5-geoip
 *
 */
'log_geoip' => true,

/*
 * Do you wish to log the user agent?
 */
'log_user_agents' => true,

/*
 * Do you wish to log your users?
 */
'log_users' => true,

/*
 * Do you wish to log devices?
 */
'log_devices' => true,

/*
 * Do you wish to log languages?
 */
'log_languages' => true,

/*
 * Do you wish to log HTTP referers?
 */
'log_referers' => true,

/*
 * Do you wish to log url paths?
 */
'log_paths' => true,

/*
 * Do you wish to log url queries and query arguments?
 */
'log_queries' => false,

/*
 * Do you wish to log routes and route parameters?
 */
'log_routes' => true,

/*
 * Log errors and exceptions?
 */
'log_exceptions' => true,

/*
 * A cookie may be created on your visitor device, so you can have information
 * on everything made using that device on your site.    *
 */
'store_cookie_tracker' => true,

/*
 * If you are storing cookies, you better change it to a name you of your own.
 */
'tracker_cookie_name' => 'st_fd_id',

/*
 * Internal tracker session name.
 */
'tracker_session_name' => 'tracker_session',

/*
 * ** IMPORTANT **
 *   Change the user model to your own.
 */

// 'user_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\User', // 'user_model' => \Satfish\User::class, 'user_model' => '\Satfish\User',

/*
 * You can use your own model for every single table Tracker has.
 */

'session_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Session',

'log_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Log',

'path_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Path',

'query_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Query',

'query_argument_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\QueryArgument',

'agent_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Agent',

'device_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Device',

'cookie_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Cookie',

'domain_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Domain',

// 'referer_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Referer', 'referer_model' => 'Satfish\Referer',

'referer_search_term_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\RefererSearchTerm',

'route_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Route',

'route_path_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\RoutePath',

'route_path_parameter_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\RoutePathParameter',

'error_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Error',

'geoip_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\GeoIp',

'sql_query_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\SqlQuery',

'sql_query_binding_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\SqlQueryBinding',

'sql_query_binding_parameter_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\SqlQueryBindingParameter',

'sql_query_log_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\SqlQueryLog',

'connection_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Connection',

'event_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Event',

'event_log_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\EventLog',

'system_class_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\SystemClass',

'language_model' => 'PragmaRX\Tracker\Vendor\Laravel\Models\Language',

/*
 * Laravel internal variables on user authentication and login.
 */
'authentication_ioc_binding' => ['auth'], // defaults to 'auth' in Illuminate\Support\Facades\Auth

'authenticated_check_method' => 'check', // to Auth::check()

'authenticated_user_method' => 'user', // to Auth::user()

'authenticated_user_id_column' => 'id', // to Auth::user()->id

'authenticated_user_username_column' => 'email', // to Auth::user()->email

/*
 * Enable the Stats Panel?
 */
'stats_panel_enabled' => false,

/*
 * Stats Panel routes before filter
 *
 */
'stats_routes_before_filter' => '',

/*
 * Stats Panel routes after filter
 *
 */
'stats_routes_after_filter' => '',

/*
 * Stats Panel routes middleware
 *
 */
'stats_routes_middleware' => 'web',

/*
 * Stats Panel template path
 */
'stats_template_path' => '/templates/sb-admin-2',

/*
 * Stats Panel base uri.
 *
 * If your site url is http://wwww.mysite.com, then your stats page will be:
 *
 *    http://wwww.mysite.com/stats
 *
 */
'stats_base_uri' => 'stats',

/*
 * Stats Panel layout view
 */
'stats_layout' => 'pragmarx/tracker::layout',

/*
 * Stats Panel controllers namespace
 */
'stats_controllers_namespace' => 'PragmaRX\Tracker\Vendor\Laravel\Controllers',

]; `

I have tried to debug that on my own and dump in src/Tracker.php file => getUserId() and in src/ReposirtoryManager => getCurrentUserId() , its giving false on login. I think this should give logged in user id.

yuters commented 4 years ago

Got the same thing happen when upgrading laravel.

Vendor/Laravel/ServiceProvider.php

    public function boot()
    {
        parent::boot();

        if (!$this->getConfig('enabled')) {
            return false;
        }

        $this->loadRoutes();

        $this->registerErrorHandler();

        // $this->bootTracker();

        $this->loadTranslations();
    }

You can just comment this line out ($this->bootTracker();) in the package Service Provider boot method.

https://github.com/antonioribeiro/tracker/blob/master/src/Vendor/Laravel/ServiceProvider.php#L84

The tracker should be booted already with the Middleware and the auth method / user id should work there. Digging a bit deeper I can see some code to avoid rebooting or rebinding a new tracker when the Service Provider comes next in the request lifecycle, but I'm too tired now to understand why the hell this doesn't work anymore. I'm not aware of any changes there with Laravel, the documentation is still the same.

Also be aware that if you have some places where you track events that don't go through the http tracker middleware, this fix might cause some problems.