Set time zone on login

Should be more reliable.
This commit is contained in:
ricola 2026-01-09 17:04:14 -06:00
parent d2e07630d5
commit d55dc53ade
4 changed files with 13 additions and 20 deletions

View file

@ -133,6 +133,7 @@ post '/login' do
end end
session.clear session.clear
session[:user_id] = user.id session[:user_id] = user.id
session[:timezone] = params[:timezone]
redirect '/' redirect '/'
else else
@error = _("Incorrect email or password.") @error = _("Incorrect email or password.")
@ -140,10 +141,6 @@ post '/login' do
end end
end end
post '/timezone' do
session[:timezone] = JSON.parse(request.body.read)['timezone']
end
get '/reset' do get '/reset' do
erb :reset erb :reset
end end
@ -641,12 +638,7 @@ helpers do
end end
def format_date(timestamp) def format_date(timestamp)
if session[:timezone]
"#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F')}" "#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F')}"
else
# Otherwise, format_date fails on first page after login. Not sure why...
"#{timestamp.strftime('%F')}"
end
end end
def format_date_and_time(timestamp) def format_date_and_time(timestamp)

View file

@ -15,15 +15,6 @@
<link rel="stylesheet" href="/bootstrap-icons.css"> <link rel="stylesheet" href="/bootstrap-icons.css">
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="/style.css">
</head> </head>
<script>
fetch('/timezone', {
method: 'post',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone })
});
</script>
<body> <body>
<div class="container py-4"> <div class="container py-4">

View file

@ -4,7 +4,7 @@
<p class="alert alert-warning mb-4"><%= @error %></p> <p class="alert alert-warning mb-4"><%= @error %></p>
<% end %> <% end %>
<form action="/login" method="post" class="mb-5"> <form action="/login" name="login" method="post" class="mb-5">
<div class="mb-3"> <div class="mb-3">
<label for="email" class="form-label"><%= _("Email") %></label> <label for="email" class="form-label"><%= _("Email") %></label>
<input type="text" name="email" class="form-control"> <input type="text" name="email" class="form-control">
@ -14,6 +14,11 @@
<input type="password" name="password" class="form-control"> <input type="password" name="password" class="form-control">
</div> </div>
<button type="submit" class="btn btn-primary"><%= _("Login") %></button> <button type="submit" class="btn btn-primary"><%= _("Login") %></button>
<input type="hidden" name="timezone" value="UTC">
</form> </form>
<p><a href="/signup"><%= _("Create account") %></a></p> <p><a href="/signup"><%= _("Create account") %></a></p>
<p><a href="/reset"><%= _("Reset password") %></a></p> <p><a href="/reset"><%= _("Reset password") %></a></p>
<script>
document.login.timezone.value = Intl.DateTimeFormat().resolvedOptions().timeZone;
</script>

View file

@ -14,4 +14,9 @@
<input type="password" name="password" class="form-control"> <input type="password" name="password" class="form-control">
</div> </div>
<button type="submit" class="btn btn-primary"><%= _("Login") %></button> <button type="submit" class="btn btn-primary"><%= _("Login") %></button>
<input type="hidden" name="timezone" value="UTC">
</form> </form>
<script>
document.login.timezone.value = Intl.DateTimeFormat().resolvedOptions().timeZone;
</script>