fixed reset password

This commit is contained in:
2026-06-02 10:55:26 +02:00
parent 3c33c8765a
commit 6a6e792cd9
8 changed files with 171 additions and 24 deletions

View File

@@ -3,12 +3,14 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flux/core/blocs/session/session_cubit.dart';
import 'package:flux/core/enums_and_consts/consts.dart';
import 'package:flux/core/utils/app_message.dart';
import 'package:flux/features/master_data/staff/data/staff_repository.dart';
import 'package:get_it/get_it.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
part 'auth_state.dart';
class AuthCubit extends Cubit<AuthState> {
final _supabase = GetIt.instance<SupabaseClient>();
final _staffRepository = GetIt.instance<StaffRepository>();
AuthCubit() : super(const AuthState());
@@ -95,10 +97,7 @@ class AuthCubit extends Cubit<AuthState> {
);
return;
}
await _supabase.auth.resetPasswordForEmail(
email,
redirectTo: resetPasswordUrl,
);
await _staffRepository.resetPassword(email);
emit(
state.copyWith(
status: AuthStatus.pwResetSent,

View File

@@ -128,6 +128,30 @@ class _AuthScreenState extends State<AuthScreen> {
_submit(), // Se lo supporti nel tuo widget custom
),
// Link "Dimenticato password?" solo in Login mode
if (state.isLoginMode) ...[
const SizedBox(height: 8),
Align(
alignment: Alignment.centerRight,
child: TextButton(
onPressed: isLoading
? null
: () => context
.read<AuthCubit>()
.requestPasswordReset(
_emailController.text.trim(),
),
child: Text(
context.l10n.authScreenForgotPassword,
style: TextStyle(
color: context.accent,
fontWeight: FontWeight.bold,
),
),
),
),
],
const SizedBox(height: 40),
// --- BOTTONE PRINCIPALE ---

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flux/main.dart';
import 'package:go_router/go_router.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
class SetPasswordScreen extends StatefulWidget {
@@ -63,7 +64,7 @@ class _SetPasswordScreenState extends State<SetPasswordScreen> {
setState(() => _isSessionReady = true);
}
} catch (e) {
print("Errore ripristino manuale sessione: $e");
debugPrint("Errore ripristino manuale sessione: $e");
}
}
@@ -98,6 +99,7 @@ class _SetPasswordScreenState extends State<SetPasswordScreen> {
backgroundColor: Colors.green,
),
);
context.go('/');
}
} on AuthException catch (e) {
setState(() {

View File

@@ -105,12 +105,15 @@ class StaffRepository {
}
Future<void> resetPassword(String email) async {
//TODO modificare per fare il reset della password tramite edge function, così da poter personalizzare l'email e il link di reset
try {
await _supabase.auth.resetPasswordForEmail(
email,
redirectTo: resetPasswordUrl,
final response = await Supabase.instance.client.functions.invoke(
'reset_password',
body: {'email': email.trim()},
);
if (response.status != 200) {
throw Exception(response.data['error'] ?? "Errore sconosciuto");
}
} catch (e) {
throw Exception("Errore nell'invio del link: $e");
}

View File

@@ -7,6 +7,7 @@ import 'package:flux/features/master_data/staff/blocs/staff_cubit.dart';
import 'package:flux/features/master_data/staff/models/staff_member_model.dart';
import 'package:flux/features/master_data/store/bloc/store_cubit.dart';
import 'package:get_it/get_it.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
class StaffScreen extends StatefulWidget {
const StaffScreen({super.key});
@@ -193,9 +194,9 @@ class _StaffScreenState extends State<StaffScreen> {
if (!member.hasJoined) {
context.read<StaffCubit>().inviteStaffMember(
member: member,
selectedStoreIds:
member.assignedStores?.map((s) => s.id!).toList() ??
[],
selectedStoreIds: member.assignedStores
.map((s) => s.id!)
.toList(),
);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
@@ -206,13 +207,6 @@ class _StaffScreenState extends State<StaffScreen> {
);
} else {
context.read<StaffCubit>().resetPassword(member.email!);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text(
'Operazione richiesta, controlla l\'email!',
),
),
);
}
}
},