-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfirebase_multi_factor_auth.dart
57 lines (48 loc) · 2.41 KB
/
firebase_multi_factor_auth.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import 'package:firebase_multi_factor_auth/models/multi_factor_auth_type.dart';
import 'package:firebase_multi_factor_auth/provider/user_provider.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'functions/check_otp_phone.dart';
import 'functions/firestore_set_first_login.dart';
import 'functions/login_first_provider.dart';
import 'functions/login_second_provider.dart';
import 'functions/sign_out.dart';
class FirebaseMultiFactorAuth {
/// Login with google
static void loginFirstProvider({
required BuildContext context,
MultiFactorAuthType authType = MultiFactorAuthType.GOOGLE,
}) =>
functionLoginFirstProvider(context: context, authType: authType);
/// Check otp code and login
static Future<bool> inputPhoneOTP(
{required BuildContext context, required String otpCode}) =>
functionCheckOTPPhone(context, otpCode);
/// Input phone number and send otp
static Future<void> inputPhoneNumberSendOTP(
{required BuildContext context, required String phoneNumber}) =>
functionLoginSecondProvider(context: context, phoneNumber: phoneNumber);
/// Change First Login to false
static Future<void> setFirstLogin(
{required BuildContext context, required bool isFirstLogin}) =>
functionSetFirstLogin(context: context, isFirstLogin: isFirstLogin);
static bool isPhoneNumberInputed({required BuildContext context}) {
var userProvider = Provider.of<UserProvider>(context, listen: false);
return !(userProvider.userLocal.uidProviderFirst.isEmpty &&
userProvider.userLocal.phoneNumber == null);
}
/// Sign out
static Future<void> signOut({required BuildContext context}) async =>
functionSignOut(context: context);
/// Check if the local user trying to log in has the same phoneNumber and google uid provider as the fetched user under his uid of the second provider.
/// The second provider uid is used as identifier in the firestore documents.
static bool isLocalUserMatchingOnlineUser({required BuildContext context}) {
var userProvider = Provider.of<UserProvider>(context, listen: false);
return (userProvider.userFetched != null &&
(userProvider.userFetched!.uidProviderFirst !=
userProvider.userLocal.uidProviderFirst ||
userProvider.userFetched!.phoneNumber !=
userProvider.userLocal.phoneNumber));
}
}