[英]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.