signInByBiometric method
Future<AuthResponse<T> >
signInByBiometric({
- BiometricConfig? config,
- Object? args,
- String? id,
- bool notifiable = true,
override
Implementation
@override
Future<AuthResponse<T>> signInByBiometric({
BiometricConfig? config,
Object? args,
String? id,
bool notifiable = true,
}) async {
emit(
const AuthResponse.loading(
AuthProviders.biometric,
AuthType.biometric,
),
args: args,
id: id,
notifiable: notifiable,
);
try {
final user = await _auth;
if (user == null || !user.isBiometric) {
return emit(
AuthResponse.unauthorized(
msg: msg.signInWithBiometric.failure ?? errorText,
provider: AuthProviders.biometric,
type: AuthType.biometric,
),
args: args,
id: id,
notifiable: notifiable,
);
}
final response = await authHandler.signInWithBiometric(config: config);
if (!response.isSuccessful) {
return emit(
AuthResponse.failure(
response.exception,
provider: AuthProviders.biometric,
type: AuthType.biometric,
),
args: args,
id: id,
notifiable: notifiable,
);
}
final token = user.accessToken;
final provider = AuthProviders.from(user.provider);
var current = Response<UserCredential>();
if ((user.email ?? user.username ?? "").isNotEmpty &&
(user.password ?? '').isNotEmpty) {
if (provider.isEmail) {
current = await authHandler.signInWithEmailNPassword(
email: user.email ?? "",
password: user.password ?? "",
);
} else if (provider.isUsername) {
current = await authHandler.signInWithUsernameNPassword(
username: user.username ?? "",
password: user.password ?? "",
);
}
} else if ((token ?? user.idToken ?? "").isNotEmpty) {
if (provider.isApple) {
current = await authHandler.signInWithCredential(
credential: OAuthProvider("apple.com").credential(
idToken: user.idToken,
accessToken: token,
),
);
} else if (provider.isFacebook) {
current = await authHandler.signInWithCredential(
credential: FacebookAuthProvider.credential(token ?? ""),
);
} else if (provider.isGoogle) {
current = await authHandler.signInWithCredential(
credential: GoogleAuthProvider.credential(
idToken: user.idToken,
accessToken: token,
),
);
}
}
if (!current.isSuccessful) {
return emit(
AuthResponse.failure(
current.exception,
provider: AuthProviders.biometric,
type: AuthType.biometric,
),
args: args,
id: id,
notifiable: notifiable,
);
}
final value = await _update(id: user.id, updates: {
AuthKeys.i.loggedIn: true,
AuthKeys.i.loggedInTime: Entity.generateTimeMills,
});
return emit(
AuthResponse.authenticated(
value,
msg: msg.signInWithBiometric.done,
provider: AuthProviders.biometric,
type: AuthType.biometric,
),
args: args,
id: id,
notifiable: notifiable,
);
} catch (error) {
return emit(
AuthResponse.failure(
msg.signInWithBiometric.failure ?? error,
provider: AuthProviders.biometric,
type: AuthType.biometric,
),
args: args,
id: id,
notifiable: notifiable,
);
}
}