fix(mobile): cancel pairing admission before persistence

Carry the pairing generation through asynchronous community admission so a reset cannot save or activate credentials when verification completes later.

Co-authored-by: Brain <1a02c72794dcd0f07058a353bc3a81f4028b8c77c92c87fce6d5c8b85970a20b@buzz.block.builderlab.xyz>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
This commit is contained in:
Wes
2026-10-15 17:13:28 -07:00
parent fb9ac18d2c
commit 7191d0bb33
2 changed files with 16 additions and 2 deletions

View File

@@ -758,7 +758,13 @@ class PairingNotifier extends Notifier<PairingState> {
);
await ref
.read(authProvider.notifier)
.authenticateWithCommunity(community);
.authenticateWithCommunity(
community,
shouldContinue: () =>
pairingGeneration == _pairingGeneration &&
state.status == PairingStatus.storing &&
!_sendIdentityToSource,
);
if (pairingGeneration != _pairingGeneration ||
state.status != PairingStatus.storing ||
_sendIdentityToSource) {
@@ -869,7 +875,10 @@ class PairingNotifier extends Notifier<PairingState> {
if (generation != _pairingGeneration) return;
await ref
.read(authProvider.notifier)
.authenticateWithCommunity(community);
.authenticateWithCommunity(
community,
shouldContinue: () => generation == _pairingGeneration,
);
if (generation != _pairingGeneration) return;
state = PairingState(
status: PairingStatus.success,

View File

@@ -669,6 +669,10 @@ void main() {
await Future<void>.delayed(Duration.zero);
expect(container.read(pairingProvider).status, PairingStatus.idle);
expect(
container.read(authProvider).value!.status,
AuthStatus.unauthenticated,
);
expect(socket.isConnected, isFalse);
});
@@ -1286,6 +1290,7 @@ class FakeAuthNotifier extends AsyncNotifier<AuthState>
lastCommunity = community;
entered?.complete();
await authentication?.future;
if (shouldContinue != null && !shouldContinue()) return;
state = AsyncData(
AuthState(status: AuthStatus.authenticated, community: community),
);