runPasskeyLogin function
void
runPasskeyLogin(})
Runs the passkey LOGIN ceremony (email-first): auth/options → native authenticator → auth/verify. A successful verify decodes the same User+token as a password sign-in, so the normal post-sign-in routing follows.
Implementation
void runPasskeyLogin(
Store<dynamic> store, {
required String email,
bool permanent = true,
void Function()? onFinished,
void Function(String message)? onFailure,
}) {
store.dispatch(PostPasskeyAuthOptions(
email,
onSuccess: (resp) async {
try {
final parsed = _publicKeyOptions(resp.body);
final res = await _authenticator.authenticate(
AuthenticateRequestType.fromJson(
parsed['publicKey'] as Map<String, dynamic>,
mediation: MediationType.Optional,
),
);
store.dispatch(PostPasskeyAuthVerify(
parsed['flowId'] as String,
res.toJson(),
permanent: permanent,
onSuccess: (_) => onFinished?.call(),
onError: (e) {
onFinished?.call();
onFailure?.call(e.description ?? 'Passkey sign-in failed.');
},
));
} catch (e) {
onFinished?.call();
onFailure?.call(passkeyErrorMessage(e));
}
},
onError: (e) {
onFinished?.call();
onFailure?.call(e.description ?? 'Passkey sign-in failed.');
},
));
}