I am try to store login activity along with user timezone i have code like below,
in login page i have used below jquery cdn,
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.33/moment-timezone-with-data.min.js" crossorigin="anonymous"></script>
i have input field with hidden type like below and script to append client timezone,
<input type="hidden" name="timezone" id="timezone">
<script>
var timezone = moment.tz.guess();
$('#timezone').val(timezone);
</script>
i have login code like below. i set timezone in session.
public function postAdminLoginPage(Request $request)
{
request()->validate([
'email' => 'required|email',
'password' => 'required',
]);
$credential = [
'email' => request('email'),
'password' => request('password'),
'role_id' => 1
];
$remember_me = ( !empty( $request->remember_me ) )? true : false;
if(Auth::attempt($credential,$remember_me)){
session(['timezone' => $request->timezone]); // saving to session
return redirect('admin/dashboard');
} else {
return redirect('adminlogin')->withErrors('Email/Password is wrong. try again');
}
}
Now after login i am storing login activity in login_activities table
i have table like below,
login_activities
id, user_id, ip, user_agent, timezone
EventServiceProvider.php
'Illuminate\Auth\Events\Login' => [
'App\Listeners\LogSuccessfulLogin',
],
inside Listeners i have file called, LogSuccessfulLogin.php
public function handle(Login $event)
{
//
LoginActivity::create([
'user_id' => $event->user->id,
'user_agent' => \Illuminate\Support\Facades\Request::header('User-Agent'),
'ip_address' => \Illuminate\Support\Facades\Request::ip(),
'timezone' => getTimezone(),
]);
}
In helper.php i hav function like below,
function getTimezone()
{
return (Session::has('timezone') ? Session::get('timezone') : 'UTC');
}
But i am not able to fetch the session variable in listeneres. if i test in seperate route it is displaying properly. may be it will take one refresh. how to this session variable to listers so that i will store in activity to display the last login date based on timezone.