I'm using flutter web and firebase. If I refresh after sign in from this web, will be sign out and go to the login page.
And if sign in again with the same account, I won't be able to sign in properly.(I don't think the sign out process is done properly.)
I use sdk 2.7, firebase_core: ^0.5.0, firebase_auth: ^0.18.0
This is the code about authentication.
enum FirebaseAuthStatus { signout, progress, signin }
class FirebaseAuthState extends ChangeNotifier {
FirebaseAuthStatus _firebaseAuthStatus = FirebaseAuthStatus.progress;
FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
User _firebaseUser;
GoogleSignIn _googleSignIn = GoogleSignIn();
FirebaseAuth _auth = FirebaseAuth.instance;
void watchAuthChange() {
_firebaseAuth.authStateChanges().listen((firebaseUser) {
if (firebaseUser == null && _firebaseUser == null) {
changeFirebaseAuthStatus();
return;
} else if (firebaseUser != _firebaseUser) {
_firebaseUser = firebaseUser;
changeFirebaseAuthStatus();
}
});
}
void changeFirebaseAuthStatus([FirebaseAuthStatus firebaseAuthStatus]) {
if (firebaseAuthStatus != null) {
_firebaseAuthStatus = firebaseAuthStatus;
} else {
if (_firebaseUser != null) {
_firebaseAuthStatus = FirebaseAuthStatus.signin;
} else {
_firebaseAuthStatus = FirebaseAuthStatus.signout;
}
}
notifyListeners();
}
main.dart
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
FirebaseAuthState _firebaseAuthState = FirebaseAuthState();
Widget _currentWidget;
@override
Widget build(BuildContext context) {
_firebaseAuthState.watchAuthChange();
return
.
.
.
switch (firebaseAuthState.firebaseAuthStatus) {
case FirebaseAuthStatus.signout:
_clearUserModel(context);
_currentWidget = AuthScreen();
break;
case FirebaseAuthStatus.signin:
_initUserModel(firebaseAuthState, context);
_currentWidget = HomeScreen();
break;
default:
_currentWidget = CustomLoading();
break;
}
Web - index.html
<!--firebase-->
<script src = "https://www.gstatic.com/firebasejs/8.6.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.6.1/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.22.1/firebase-firestore.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.6.1/firebase-storage.js"></script>
<script>
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
var firebaseConfig = {
apiKey: "AIzaSyBFgw6wbpSEhJEl7z8sumjWg5hUkY7sBK8",
authDomain: "omd-community-ee697.firebaseapp.com",
projectId: "omd-community-ee697",
storageBucket: "omd-community-ee697.appspot.com",
messagingSenderId: "707179646659",
appId: "1:707179646659:web:74e7e0e6ed34affa851c76",
measurementId: "G-4KVWCWCWWZ"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
firebase.getAnalytics(app);
//firebase auth 유지 (자동로그인 태스트)
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL);
</script>
Can I get help on how to maintain firebase authentication?
Thank you.
Aucun commentaire:
Enregistrer un commentaire