Skip to content

Commit a1932ea

Browse files
committed
fix : Fixed username logic and added logging
1 parent 6509f05 commit a1932ea

File tree

7 files changed

+53
-12
lines changed

7 files changed

+53
-12
lines changed

lib/features/auth/data/firebase_auth_repo.dart

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,6 @@ class FirebaseAuthRepo implements AuthRepo {
6767
UserCredential userCredential = await firebaseAuth
6868
.createUserWithEmailAndPassword(email: email, password: password);
6969

70-
//data saved to firestore
71-
await userRepo.saveUserData(
72-
userCredential.user!.uid,
73-
email,
74-
name,
75-
);
7670

7771
//create user
7872
AppUser user = AppUser(
@@ -135,7 +129,7 @@ class FirebaseAuthRepo implements AuthRepo {
135129

136130
//get username from userrepo
137131
try {
138-
final username = await userRepo.getUserUsername(firebaseUser.uid);
132+
final username = await userRepo.getUserUsername(firebaseUser.uid) ;
139133

140134
return AppUser(
141135
uid: firebaseUser.uid,

lib/features/auth/data/firebase_user_repo.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import 'package:cloud_firestore/cloud_firestore.dart';
44
class FirebaseUserRepo implements UserRepo {
55
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
66

7-
87
//save user data
98
@override
109
Future<void> saveUserData(String uid, String email, String username) async {
@@ -62,4 +61,13 @@ class FirebaseUserRepo implements UserRepo {
6261
throw Exception('Failed to delete user data: $e');
6362
}
6463
}
64+
@override
65+
Future<bool> checkIfUserExists(String uid) async{
66+
try {
67+
DocumentSnapshot s = await _firestore.collection('users').doc(uid).get();
68+
return s.exists;
69+
} catch (e) {
70+
throw Exception('Failed to check if user exists: $e');
71+
}
72+
}
6573
}

lib/features/auth/domain/repos/user_repo.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ abstract class UserRepo {
44
Future<Map<String, dynamic>?> getUserData(String uid);
55
Future<void> updateUsername(String uid, String newUsername);
66
Future<void> deleteUserData(String uid);
7+
Future<bool> checkIfUserExists(String uid);
78
}

lib/features/auth/presentation/cubits/auth_cubit.dart

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@
22

33
import 'package:azt/features/auth/domain/entities/app_user.dart';
44
import 'package:azt/features/auth/domain/repos/auth_repo.dart';
5+
import 'package:azt/features/auth/domain/repos/user_repo.dart';
56
import 'package:azt/features/auth/presentation/cubits/auth_states.dart';
67
import 'package:flutter_bloc/flutter_bloc.dart';
7-
8+
import 'package:logger/logger.dart';
89
class AuthCubit extends Cubit<AuthState>{
910
final AuthRepo authRepo;
11+
final UserRepo userRepo;
12+
final logger = Logger();
1013
AppUser? _currentUser;
11-
12-
AuthCubit({required this.authRepo}) : super(AuthInitial());
14+
String? _pendingUserName;
15+
AuthCubit({required this.authRepo,required this.userRepo}) : super(AuthInitial());
1316

1417
//get current user
1518
AppUser? get currentUser => _currentUser;
@@ -25,6 +28,16 @@ class AuthCubit extends Cubit<AuthState>{
2528
if (user!= null){
2629
_currentUser = user;
2730
if (user.emailVerified){
31+
bool status = await userRepo.checkIfUserExists(user.uid);
32+
logger.d("Current status is $status\n from checkAuth()");
33+
if(!status){//If user does not exist on CFS then create user
34+
35+
userRepo.saveUserData(
36+
user.uid,
37+
user.email,
38+
user.name,
39+
);
40+
}
2841
emit(Authenticated(user));
2942
}
3043
else{
@@ -67,6 +80,7 @@ class AuthCubit extends Cubit<AuthState>{
6780
authRepo.sendEmailVerification();
6881
if (user != null){
6982
_currentUser = user;
83+
_pendingUserName = name;
7084
if(user.emailVerified){
7185
emit(Authenticated(user));
7286
}
@@ -160,6 +174,21 @@ Future<void> checkEmailVerification() async {
160174
final updatedUser = await authRepo.getCurrentUser();
161175

162176
if (updatedUser?.emailVerified ?? false) {
177+
bool status = await userRepo.checkIfUserExists(updatedUser!.uid);
178+
if(!status){
179+
logger.d("Creating user in Firestore after email verification from checkEmailVerification:authCubit");
180+
final userName = _pendingUserName ?? updatedUser.name;
181+
await userRepo.saveUserData(
182+
user.uid,
183+
user.email,
184+
userName,
185+
);
186+
_pendingUserName = null;
187+
logger.d("Firestore user created successfully");
188+
}
189+
else {
190+
logger.d("User already exists in Firestore");
191+
}
163192
emit(Authenticated(updatedUser!));
164193
} else {
165194
emit(EmailNotVerified(updatedUser!));

lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class MyApp extends StatelessWidget {
4242
//auth cubit
4343
BlocProvider<AuthCubit>(
4444
create: (context)=>
45-
AuthCubit(authRepo: firebaseAuthRepo)..checkAuth() //calls checkauth function to check if authenticated
45+
AuthCubit(authRepo: firebaseAuthRepo,userRepo: firebaseUserRepo)..checkAuth() //calls checkauth function to check if authenticated
4646
),
4747
],
4848

pubspec.lock

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,14 @@ packages:
272272
url: "https://pub.dev"
273273
source: hosted
274274
version: "5.1.1"
275+
logger:
276+
dependency: "direct main"
277+
description:
278+
name: logger
279+
sha256: a7967e31b703831a893bbc3c3dd11db08126fe5f369b5c648a36f821979f5be3
280+
url: "https://pub.dev"
281+
source: hosted
282+
version: "2.6.2"
275283
matcher:
276284
dependency: transitive
277285
description:

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ dependencies:
4040
google_sign_in: ^7.2.0
4141
google_sign_in_web: ^1.1.0
4242
cloud_firestore: ^6.1.0
43+
logger: ^2.6.2
4344

4445
dev_dependencies:
4546
flutter_test:

0 commit comments

Comments
 (0)