[英]How to make Firebase user in flutter outside the google sign in function?
我制作了一个应用程序,您可以在其中使用 Google 帐户登录,并且我想要一个变量来存储用户是否登录并将其上传到 Firestore。 但是要使用更新数据功能,我需要传入一个用户对象,该对象仅在google登录功能中可用。 那么如何让谷歌之外的用户登录呢?
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:rxdart/rxdart.dart';
class AuthService {
final GoogleSignIn _googleSignIn = GoogleSignIn();
final FirebaseAuth _auth = FirebaseAuth.instance;
final Firestore _db = Firestore.instance;
bool loggedIn = false;
Observable<FirebaseUser> user; //firebase user
Observable<Map<String, dynamic>> profile; //custom user data in Firestore
PublishSubject loading = PublishSubject();
//constructor
AuthService() {
user = Observable(_auth.onAuthStateChanged);
profile = user.switchMap((FirebaseUser u) {
if (u != null) {
return _db.collection('users').document(u.uid).snapshots().map((
snap) => snap.data);
} else {
return Observable.just({});
}
});
}
Future<String> testSignInWithGoogle() async {
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
final FirebaseUser user = (await _auth.signInWithCredential(credential))
.user;
assert(user.email != null);
assert(user.displayName != null);
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
loggedIn = true;
updateUserData(user);
return 'signInWithGoogle succeeded: $user';
}
void updateUserData(FirebaseUser user) async {
DocumentReference ref = _db.collection('users').document(user.uid);
//loggedIn = true;
return ref.setData({
'uid': user.uid,
'email': user.email,
'photoURL': user.photoUrl,
'displayName': user.displayName,
'lastSeen': DateTime.now(),
'loggedIn': loggedIn,
}, merge: true);
}
void signOut() {
_auth.signOut();
loggedIn = false;
}
}
final AuthService authService = AuthService();
如果我理解你的问题,你想操纵 Firebase 用户。 您可以使用多种方法创建 Firebase 用户,而不仅仅是 GoogleSignIn 的一种。 之后,您可以使用firebase_auth
包中的一系列方法更新用户。
下面是几个简单的例子:
FirebaseUser _firebaseUser;
FirebaseAuth _auth = FirebaseAuth.instance;
void registerFirebaseUser(String email, String password){
_auth.createUserWithEmailAndPassword(
email: email,
password: password
).then((AuthResult authResult) {
_firebaseUser = authResult.user;
});
}
void updateFirebaseUsername(String username) {
UserUpdateInfo userUpdateInfo = UserUpdateInfo();
userUpdateInfo.displayName = username;
_firebaseUser.updateProfile(userUpdateInfo);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.