fix(authentication): make sur access token is available on every steps
This commit is contained in:
parent
b83275aaf6
commit
eb4ae834c1
@ -27,7 +27,7 @@ class ExampleSignInCubit extends SignInCubit<int> {
|
||||
@override
|
||||
FutureOrResult<int?> onSignInWithEmailAndPassword(
|
||||
Result<Account, AppException> result, WyattForm form) {
|
||||
print('onSignInWithEmailAndPassword');
|
||||
print('onSignInWithEmailAndPassword: ${result.ok?.accessToken}');
|
||||
|
||||
return const Ok(1);
|
||||
}
|
||||
|
@ -72,11 +72,15 @@ class AuthenticationFirebaseDataSourceImpl<Data>
|
||||
return;
|
||||
}
|
||||
|
||||
Account _addToStream(
|
||||
Future<Account> _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<Data>
|
||||
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<Data>
|
||||
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<Data>
|
||||
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<Data>
|
||||
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<Data>
|
||||
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) {
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user