feat: Update JWT to 75 days and remove session timeout

This commit is contained in:
ssbg04 committed 2026-06-25 02:13:41 +08:00
1 parent 6ded3a45e4
commit 352b34e2d5
2 files changed
+2 -74

No files matched your search

+1 -1
View File
@@ -18,7 +18,7 @@ exports.login = (req, res) => {
const token = jwt.sign(
{ id: user.id, username: user.username, role: user.role },
process.env.JWT_SECRET,
{ expiresIn: '30d' } // Extended for Remember Me support
{ expiresIn: '75d' } // Extended for Remember Me support
);
res.json({
@@ -1,8 +1,5 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../providers/auth_provider.dart';
import '../../screens/login/login_screen.dart';
class InactivityWrapper extends ConsumerStatefulWidget {
final Widget child;
@@ -19,77 +16,8 @@ class InactivityWrapper extends ConsumerStatefulWidget {
}
class _InactivityWrapperState extends ConsumerState<InactivityWrapper> {
Timer? _inactivityTimer;
// 5 minutes = 300 seconds
static const int _inactivityTimeoutSeconds = 300;
@override
void initState() {
super.initState();
}
void _resetTimer() {
// Only run the timer if the user is logged in
final authState = ref.read(authProvider);
if (authState.value == null) {
_inactivityTimer?.cancel();
return;
}
_inactivityTimer?.cancel();
_inactivityTimer = Timer(const Duration(seconds: _inactivityTimeoutSeconds), _handleInactivity);
}
Future<void> _handleInactivity() async {
// Guard: only act if user is still logged in
final authState = ref.read(authProvider);
if (authState.value == null) return;
// 1. Log out first (clears stored token)
await ref.read(authProvider.notifier).logout();
// 2. Navigate to login screen with sessionExpired flag using the root navigator
final navState = widget.navigatorKey.currentState;
if (navState != null && navState.mounted) {
navState.pushAndRemoveUntil(
MaterialPageRoute(builder: (_) => const LoginScreen(sessionExpired: true)),
(route) => false,
);
}
}
@override
Widget build(BuildContext context) {
// Listen to auth state changes to start/stop the timer
ref.listen(authProvider, (previous, next) {
if (next.value != null) {
// User logged in, start timer
_resetTimer();
} else {
// User logged out, cancel timer
_inactivityTimer?.cancel();
}
});
return Listener(
behavior: HitTestBehavior.translucent,
onPointerDown: (_) => _resetTimer(),
onPointerMove: (_) => _resetTimer(),
onPointerUp: (_) => _resetTimer(),
// Track keyboard activity as well
child: Focus(
onKeyEvent: (node, event) {
_resetTimer();
return KeyEventResult.ignored;
},
child: widget.child,
),
);
}
@override
void dispose() {
_inactivityTimer?.cancel();
super.dispose();
return widget.child;
}
}