diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart index 947295c2..f8ad2ba2 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart @@ -27,7 +27,7 @@ class ExampleSignInCubit extends SignInCubit { @override FutureOrResult onSignInWithEmailAndPassword( Result result, WyattForm form) { - print('onSignInWithEmailAndPassword'); + print('onSignInWithEmailAndPassword: ${result.ok?.accessToken}'); return const Ok(1); } diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart index f745e8cf..de644d5e 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart @@ -72,11 +72,15 @@ class AuthenticationFirebaseDataSourceImpl return; } - Account _addToStream( + Future _addToCredentialStream( UserCredential userCredential, - AuthenticationChangeEvent Function(Account account) eventBuilder, - ) { - final account = AccountModel.fromFirebaseUserCredential(userCredential); + ) async { + final currentUser = _firebaseAuth.currentUser; + final jwt = await currentUser?.getIdToken(true); + final account = AccountModel.fromFirebaseUserCredential( + userCredential, + accessToken: jwt, + ); _latestCredentials.add(userCredential); @@ -114,12 +118,7 @@ class AuthenticationFirebaseDataSourceImpl password: password, ); - return _addToStream( - userCredential, - (account) => SignedUpEvent( - account: account, - ), - ); + return _addToCredentialStream(userCredential); } on FirebaseAuthException catch (e) { throw SignUpWithEmailAndPasswordFailureFirebase.fromCode(e.code); } catch (_) { @@ -139,12 +138,7 @@ class AuthenticationFirebaseDataSourceImpl password: password, ); - return _addToStream( - userCredential, - (account) => SignedInEvent( - account: account, - ), - ); + return _addToCredentialStream(userCredential); } on FirebaseAuthException catch (e) { throw SignInWithEmailAndPasswordFailureFirebase.fromCode(e.code); } catch (_) { @@ -158,12 +152,7 @@ class AuthenticationFirebaseDataSourceImpl try { final userCredential = await _firebaseAuth.signInAnonymously(); - return _addToStream( - userCredential, - (account) => SignedInEvent( - account: account, - ), - ); + return _addToCredentialStream(userCredential); } on FirebaseAuthException catch (e) { throw SignInAnonymouslyFailureFirebase.fromCode(e.code); } catch (_) { @@ -191,12 +180,7 @@ class AuthenticationFirebaseDataSourceImpl final userCredential = await _firebaseAuth.signInWithCredential(credential); - return _addToStream( - userCredential, - (account) => SignedInEvent( - account: account, - ), - ); + return _addToCredentialStream(userCredential); } on FirebaseAuthException catch (e) { throw SignInWithGoogleFailureFirebase.fromCode(e.code); } catch (_) { @@ -248,7 +232,11 @@ class AuthenticationFirebaseDataSourceImpl throw Exception(); // Get caught just after. } - final account = AccountModel.fromFirebaseUser(_firebaseAuth.currentUser); + final jwt = await _firebaseAuth.currentUser?.getIdToken(true); + final account = AccountModel.fromFirebaseUser( + _firebaseAuth.currentUser, + accessToken: jwt, + ); return account; } on FirebaseAuthException catch (e) { diff --git a/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart index c79d54e8..cca70988 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart @@ -21,8 +21,9 @@ import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; /// Account Model to parse Firebase User data class AccountModel extends Account { factory AccountModel.fromFirebaseUserCredential( - UserCredential? userCredential, - ) { + UserCredential? userCredential, { + required String? accessToken, + }) { final user = userCredential?.user; if (user != null) { final providerId = @@ -39,14 +40,17 @@ class AccountModel extends Account { email: user.email, phoneNumber: user.phoneNumber, photoURL: user.photoURL, - accessToken: userCredential?.credential?.accessToken, + accessToken: accessToken, ); } else { throw ModelParsingFailureFirebase('null-user', 'User cannot be null'); } } - factory AccountModel.fromFirebaseUser(User? user, {String? accessToken}) { + factory AccountModel.fromFirebaseUser( + User? user, { + required String? accessToken, + }) { if (user != null) { final providerId = (user.providerData.isEmpty) ? '' : user.providerData.first.providerId;