verify method

Future<Session> verify(
  1. String token, {
  2. Context? ctx,
})

Implementation

Future<Session> verify(String token, {Context? ctx}) async {
  await ready();
  if (token.isEmpty) {
    throw Status.unauthorized.err();
  }
  _setState(_state.copyWith(authenticating: true));
  try {
    final accessToken = await _tokenizer.verify(token, ctx: ctx);
    final accessKey = accessToken?.token ?? '';
    if (accessKey.isEmpty) {
      throw Status.unauthorized.err();
    }
    final session = await _tokenizer.authenticate(
      accessKey,
      ctx: _withToken(ctx, accessKey),
    );
    if (session == null) {
      throw Status.unauthorized.err();
    }
    await _persist(
      token: accessKey,
      session: session,
      expiresAt: accessToken?.expiresAt,
    );
    _setState(
      _state.copyWith(
        ready: true,
        session: session,
        expiresAt: accessToken?.expiresAt,
        authenticating: false,
      ),
    );
    return session;
  } catch (_) {
    _setState(_state.copyWith(authenticating: false));
    rethrow;
  }
}