bugfix> android > 投稿

私はユーザーデータがFireストアに保存されるプロジェクトに取り組んでいます。ユーザーがgoogleでサインインしたときにユーザー用の新しいドキュメントを作成しています。これが私のコードです

import 'package:firebase_auth/firebase_auth.dart';
import 'package:gfd_official/User/User.dart';
import 'package:gfd_official/services/database.dart';
import 'package:google_sign_in/google_sign_in.dart';
class GSignInhelp {
 final FirebaseAuth _auth = FirebaseAuth.instance;
 //Firebase User
 Userdat _userFromFirebase(User user) {
 return user != null ? Userdat(uid: user.uid) : null;
 }
 //auth change user stream
 Stream<Userdat> get user {
 return _auth.authStateChanges().map(_userFromFirebase);
}
Future signInWithGoogle() async {
GoogleSignIn googleSignIn = GoogleSignIn();
final account = await googleSignIn.signIn();
final auth = await account.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: auth.accessToken,
idToken: auth.idToken,
);
try {
final res = await _auth.signInWithCredential(credential);
User user = res.user;
await DatabaseService(uid: user.uid)
    .updateUserRole(user.displayName, user.email, 'basic');
return _userFromFirebase(user);
} catch (e) {
  print(e.toString());
  return null;
  }
}
Future logOut() async {
try {
  GoogleSignIn().signOut();
  return await _auth.signOut();
} catch (e) {
  print(e.toString());
  return null;
}
}
}

Fire Storeでユーザーの役割を正常に変更できましたが、データベースのユーザーサインインの値がデフォルトに設定されるのがわかりますが、これは望ましくありません。だから、私の質問は、ユーザーが初めてサインインしたのか、リピーターだったのかを確認する方法です。

ユーザーが戻ってきた場合、Fireストアのユーザーデータをリセットしたくありません。ユーザーが新しい場合は、Fireストアにデフォルト値でドキュメントを作成します。

結論、ユーザーが既存のユーザーまたは新しいユーザーであるGoogleでサインインするときに、どのように確認できますか?

回答 2 件
  • ユーザーが新規ユーザーであるか以前に登録されたユーザーであるかを確認するには、 User Credential そしてあなたを通してあなたは authResult.additionalUserInfo.isNewUser ユーザーがまだ登録されていない場合。

    次のコードを使用できます。

    Future<UserCredential> signInWithGoogle(BuildContext context) async {
        FirebaseAuth _auth = FirebaseAuth.instance;
        // Trigger the authentication flow
        final GoogleSignInAccount googleUser = await GoogleSignIn().signIn();
        // Obtain the auth details from the request
        final GoogleSignInAuthentication googleAuth =
            await googleUser.authentication;
        // Create a new credential
        final GoogleAuthCredential credential = GoogleAuthProvider.credential(
          accessToken: googleAuth.accessToken,
          idToken: googleAuth.idToken,
        );
        final UserCredential authResult =
            await _auth.signInWithCredential(credential);
        final User user = authResult.user;
        ///Her to check isNewUser OR Not
        if (authResult.additionalUserInfo.isNewUser) {
          if (user != null) {
          //You can her set data user in Fire store
          //Ex: Go to RegisterPage()
            }
          }
        } else {
         
          //Ex: Go to HomePage()
        }
        return await FirebaseAuth.instance.signInWithCredential(credential);
      }
    
    

  • 他の誰かが良い解決策を望んでいるなら、ここでそれをチェックしなければなりません(https://easilyknowit.com/how-to-check-if-user-is-new-or-existing-when-login-with-google-using-firebase -in-flutter /)私の解決策を見つけましたここからそれはよく説明されています。

あなたの答え