programing

Firebase 인증을 사용하여 Float에서 사용자를 로그아웃하는 방법

oldcodes 2023. 7. 13. 21:06
반응형

Firebase 인증을 사용하여 Float에서 사용자를 로그아웃하는 방법

앱에서 현재 사용자를 로그아웃하는 데 문제가 있습니다.

제가 사용하는 방법은 다음과 같습니다.

....
onPressed:_signOut
//jump to function


  void _signOut() {
  FirebaseAuth.instance.signOut();
  FirebaseUser user = FirebaseAuth.instance.currentUser;
  //print('$user');
  runApp(
      new MaterialApp(
        home: new LoginPage(),
      )

  );
}

이제 버튼을 누르면 사용자가 로그아웃하고 다시 로그인해야 하는 홈 페이지로 리디렉션됩니다. 그러나 리디렉션은 발생하지만 사용자 데이터는 계속 저장되므로 버튼을 다시 누르면 마지막 계정으로 자동으로 다시 로그인합니다.로그아웃 후 로그인을 시도할 때마다 앱이 사용자의 자격 증명을 묻도록 사용자 데이터를 제거하려면 어떻게 해야 합니까?

페이지 간의 연결과 그에 따라 그들의 행동이 어떻게 변하는지에 대해 제가 뭔가를 놓치고 있다고 생각합니다만, 무엇입니까?

업데이트: Firebase 인증과 함께 Google 로그인 기능을 사용합니다.

   Future<String> _testSignInWithGoogle() async {
  final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
  final GoogleSignInAuthentication googleAuth =
  await googleUser.authentication;
  final FirebaseUser user = await _auth.signInWithGoogle(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );
  assert(user.email != null);
  assert(user.displayName != null);
  assert(!user.isAnonymous);
  assert(await user.getToken() != null);
return 'signInWithGoogle succeeded: $user';
}

내 로그인 페이지는 다음과 같습니다.

    class LoginPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return new Scaffold(
        appBar: new AppBar(
          title: new Text("Login"), backgroundColor: Colors.blue,),
        body: new Container(
            child: new Center(
                child: new Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    new IconButton(
                      icon: new Icon(Icons.account_box, color: Colors.red),
                      onPressed:  _signIn,
                      iconSize: 80.0,),
                    new Text("Google Signin")
                  ],
                )
            )
        )
    );
  }
}

업데이트: _signOut() 메서드가 다음과 같이 비동기로 변경되었습니다.

    Future <LoginPage> _signOut()  async{
    await FirebaseAuth.instance.signOut();

    return new LoginPage();
}

이제 로그아웃을 누르면 로그인 페이지로 리디렉션되지 않고 사용자가 로그아웃되지 않습니다.

파이어베이스 인증자signOut메서드가 비동기식입니다.당신은 당신의._signOut방법async.

Future<void> _signOut() async {
  await FirebaseAuth.instance.signOut();
}

로의 전화를 받기 위해.runApp사용자가 로그아웃한 후에 발생합니다.

당신도 전화해야 합니다._googleSignIn.signOut()원하는 경우 로그아웃할 때signIn현재 Google 사용자를 자동으로 다시 사용하는 대신 사용자에게 인증 대화 상자를 제공합니다.

Firebase 인스턴스가 필요합니다.저자

  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

그리고 나서.

  _signOut() async {
    await _firebaseAuth.signOut();
   }

내가 본 대부분의 데모는 다음과 같은 명령을 사용하여 Firebase 로그아웃만 살펴봤습니다._auth.signOut();

이것은 더 이상 존재하지 않는 것 같습니다(위 콜린의 답변 참조)

_googleSignIn.signOut()

그래서 구글에서 로그아웃/로그아웃할 때 이 한 가지 방법을 사용해야 했습니다.

_googleSignIn.disconnect();

먼저 Firebase 인스턴스 생성그렇게 작성

 FirebaseAuth auth = FirebaseAuth.instance;

그런 다음 로그아웃 단추 또는 로그아웃에 사용할 모든 방법에 이 정보를 추가합니다.

signOut() async {
    await auth.signOut();
  }

함수를 만든 다음 버튼 내에서 signOut을 호출할 수도 있습니다.

import 'package:flutter/material.dart';

class SignOut extends StatefulWidget {
  @override
  _ SignOut State createState() => _ SignOut State();
}

class _ SignOut State extends State< SignOut > {

     FirebaseAuth auth = FirebaseAuth.instance;
    
      signOut() async {
        await _firebaseAuth.signOut();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          backgroundColor: Colors.white,
          body: Center(
            child: Container(
              child: RaisedButton(
                onPressed: () {
                  signOut();
                },
    
              )
            ),
          ),
        );
      }
    }

당신이 결정하라.

위의 모든 대답이 작동하지 않는 경우 페이지가 다른 모든 것 위에 놓여 있을 수 있습니다.Navigator.of(context).pop();페이지를 팝업합니다.

저는 이 작은 실수 때문에 존재하지도 않았던 실수를 찾기 위해 몇 시간 동안 찾아다녔습니다.

로그아웃 기능을 비동기식으로 만들어야 합니다.

   Future<void> _signOut() async {
  await FirebaseAuth.instance.signOut();
}

로그아웃 기능을 호출하는 Future 메서드를 선언하고 로그아웃이 완료되면 페이지를 리디렉션합니다.

Future logout() async {
await _firebaseAuth.signOut().then((value) => Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => LoginPage()),(route) => false))); 
}

그것이 나에게 효과가 있었습니다.

 TextButton(
                  onPressed: () async {
                    final navigator = Navigator.of(context);
                    await CacheHelper.removeData(key: AppConstants.userKey);
                    await GoogleSignIn().signOut();

                    navigator.pushAndRemoveUntil(MaterialPageRoute(
                        builder: (c) => const GoogleAuthScreen()),(route)=>false);
                  },

언급URL : https://stackoverflow.com/questions/45079459/how-to-signout-a-user-in-flutter-with-firebase-authentication

반응형