verifyPhoneByOtp method

  1. @override
Future<AuthResponse<Auth<AuthKeys>>> verifyPhoneByOtp(
  1. OtpAuthenticator authenticator
)
override

Implementation

@override
Future<AuthResponse> verifyPhoneByOtp(OtpAuthenticator authenticator) async {
  final token = authenticator.token;
  final code = authenticator.smsCode;
  if (!AuthValidator.isValidToken(token)) {
    return AuthResponse.failure(
      msg.token,
      provider: AuthProviders.phone,
      type: AuthType.phone,
    );
  } else if (!AuthValidator.isValidSmsCode(code)) {
    return AuthResponse.failure(
      msg.otp,
      provider: AuthProviders.phone,
      type: AuthType.phone,
    );
  } else {
    try {
      final credential = authenticator.credential;
      final response = await authHandler.signInWithCredential(
        credential: credential,
      );
      if (response.isSuccessful) {
        final result = response.data?.user;
        if (result != null) {
          final user = authenticator.copy(
            id: result.uid,
            accessToken: credential.accessToken,
            idToken: credential.token != null ? "${credential.token}" : null,
            email: result.email,
            name: result.displayName,
            phone: result.phoneNumber,
            photo: result.photoURL,
            provider: AuthProviders.phone.name,
            loggedIn: true,
            loggedInTime: Entity.generateTimeMills,
            verified: true,
          );
          return AuthResponse.authenticated(
            user,
            msg: msg.signInWithPhone.done,
            provider: AuthProviders.phone,
            type: AuthType.phone,
          );
        } else {
          return AuthResponse.failure(
            msg.authorization,
            provider: AuthProviders.phone,
            type: AuthType.phone,
          );
        }
      } else {
        return AuthResponse.failure(
          response.exception,
          provider: AuthProviders.phone,
          type: AuthType.phone,
        );
      }
    } catch (_) {
      return AuthResponse.failure(
        msg.signInWithPhone.failure ?? _,
        provider: AuthProviders.phone,
        type: AuthType.phone,
      );
    }
  }
}