-
Notifications
You must be signed in to change notification settings - Fork 0
/
auth.dart
83 lines (70 loc) · 2.48 KB
/
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import 'package:firebase_auth/firebase_auth.dart' as auth;
import 'package:google_sign_in/google_sign_in.dart';
import 'package:rxdart/rxdart.dart';
import 'package:tiger_tracker_v2/database.dart';
import 'package:tiger_tracker_v2/user.dart';
class AuthService {
final GoogleSignIn _googleSignIn = GoogleSignIn();
final auth.FirebaseAuth _auth = auth.FirebaseAuth.instance;
//Stream<FirebaseUser> user;
Stream<Map<String, dynamic>> profile;
PublishSubject loading = PublishSubject();
// create user obj based on FirebaseUser
User _userFromFirebaseUser(auth.User user) {
return user != null ? User(uid: user.uid) : null;
}
//auth change user stream
Stream<User> get user {
return _auth.authStateChanges().map(_userFromFirebaseUser);
}
// register with Email and Password
Future registerWithEmailAndPassword(String _email, String _password) async {
try {
auth.UserCredential result = await _auth.createUserWithEmailAndPassword(
email: _email, password: _password);
auth.User user = result.user;
//create a new document for the user with the uid
await DatabaseService(uid: user.uid)
.updateUserData('0', 'New Username', _email, user.uid);
return _userFromFirebaseUser(user);
} catch (e) {
print(e.toString());
return null;
}
}
//sign in with email and password
Future signInWithEmailAndPassword(String _email, String _password) async {
try {
auth.UserCredential result = await _auth.signInWithEmailAndPassword(
email: _email, password: _password);
auth.User user = result.user;
return _userFromFirebaseUser(user);
} catch (e) {
print(e.toString());
return null;
}
}
//sign in with google
Future googleSignIn() async {
try {
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
final auth.AuthCredential credential = auth.GoogleAuthProvider.credential(
idToken: googleAuth.idToken, accessToken: googleAuth.accessToken);
auth.UserCredential result = await _auth.signInWithCredential(credential);
} catch (e) {
print(e.toString());
return null;
}
}
//sign out logic
Future signOut() async {
try {
return await _auth.signOut();
} catch (e) {
print(e.toString());
return null;
}
}
}