我使用 google 按钮登录首先进入主页,然后显示登录选项(电子邮件帐户)。在这里做啥?

Posted

技术标签:

【中文标题】我使用 google 按钮登录首先进入主页,然后显示登录选项(电子邮件帐户)。在这里做啥?【英文标题】:My login with google button takes to homepage first and then shows the sign in options(email accounts). What to do here?我使用 google 按钮登录首先进入主页,然后显示登录选项(电子邮件帐户)。在这里做什么? 【发布时间】:2019-10-03 13:47:22 【问题描述】:

我正在开发我的项目。我正在尝试使用 google 使用 firebase 登录身份验证来制作登录页面。我已经构建了它,但是当我单击使用 Google 登录按钮时,它首先进入主页,然后显示登录选项,但反之亦然。帮帮我。

这里是登录页面Login Page。

这会在我点击“使用 Google 登录”按钮 enter image description here 后显示。

现在终于出现登录选项enter image description here。

这是我的代码

谷歌登录验证

//google sign in
 final GoogleSignIn googleSignIn=  GoogleSignIn();
  final FirebaseAuth _auth = FirebaseAuth.instance;
  Future<FirebaseUser> _signIn() async
    //GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
    GoogleSignInAccount googleUser = await googleSignIn.signIn();
    GoogleSignInAuthentication googleAuth = await googleUser.authentication;
    final AuthCredential credential = GoogleAuthProvider.getCredential(
      idToken: googleAuth.idToken,
      accessToken: googleAuth.accessToken,
    );
    final FirebaseUser user = await _auth.signInWithCredential(credential);
    print("User Name: $user.displayName");
    assert(await user.getIdToken() != null);
    final FirebaseUser currentUser = await _auth.currentUser();
    assert(user.uid == currentUser.uid);
    return user;
  

登录按钮

RaisedButton(
                child: Text('Login with Google'),
                color: Colors.orange,
                textColor: Colors.white,
                elevation: 7.0,
                onPressed: ()  _signIn();
                  Navigator.of(context).pushReplacementNamed('/homepage');
                
              ),

【问题讨论】:

【参考方案1】:

如果您什么都不做,为什么要返回_signIn() 中的用户?

相反,我会将导航语句移到_signIn() 的末尾,因为_signIn()async

//google sign in
  final GoogleSignIn googleSignIn=  GoogleSignIn();
  final FirebaseAuth _auth = FirebaseAuth.instance;
  Future<FirebaseUser> _signIn() async
    //GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
    GoogleSignInAccount googleUser = await googleSignIn.signIn();
    GoogleSignInAuthentication googleAuth = await googleUser.authentication;
    final AuthCredential credential = GoogleAuthProvider.getCredential(
      idToken: googleAuth.idToken,
      accessToken: googleAuth.accessToken,
    );
    final FirebaseUser user = await _auth.signInWithCredential(credential);
    print("User Name: $user.displayName");
    assert(await user.getIdToken() != null);
    final FirebaseUser currentUser = await _auth.currentUser();
    assert(user.uid == currentUser.uid);
    Navigator.of(context).pushReplacementNamed('/homepage');
  
RaisedButton(
                child: Text('Login with Google'),
                color: Colors.orange,
                textColor: Colors.white,
                elevation: 7.0,
                onPressed: () 
                  _signIn(); 
                
              ),

【讨论】:

如果我创建了另一个文件来执行身份验证部分并且在其中我无法执行 Navigator.of(context)..... 下面 asser(user.id==currentUser.uid) ;那我该怎么办?因为如果我写导航器....它说上下文没有定义【参考方案2】:

另一种可能性是:

RaisedButton(
            child: Text('Login with Google'),
            color: Colors.orange,
            textColor: Colors.white,
            elevation: 7.0,
            onPressed: () 
              _signIn().then(() 
               Navigator.of(context).pushReplacementNamed('/homepage')); 
            
          ),

【讨论】:

【参考方案3】:

您正在按按钮导航到主屏幕 -

RaisedButton(
                    child: Text('Login with Google'),
                    color: Colors.orange,
                    textColor: Colors.white,
                    elevation: 7.0,
                    onPressed: ()  _signIn();
                      Navigator.of(context).pushReplacementNamed('/homepage');
                    
                  ),

应该如下-

RaisedButton(
                    child: Text('Login with Google'),
                    color: Colors.orange,
                    textColor: Colors.white,
                    elevation: 7.0,
                    onPressed: ()  _signIn();

                    
                  ),

从谷歌登录获得正确响应后,您可以通过添加“Navigator.of(context).pushReplacementNamed('/homepage');”导航到主屏幕

【讨论】:

请通过-***.com/a/56166076/5523949 导航器代码在哪里写的完整代码。如果您正在使用另一个类,那么在调用时您可以在该类中传递上下文。

以上是关于我使用 google 按钮登录首先进入主页,然后显示登录选项(电子邮件帐户)。在这里做啥?的主要内容,如果未能解决你的问题,请参考以下文章

从google主页,怎么进入它的免费登陆入口

单击按钮启动 Google 登录

软件工程结对作业01

在 Google Analytics 中跟踪登录事件

JavaWeb过滤器验证登录(避免未经登录进入主页)

使用firebase google身份验证单击登录按钮时总是会自动登录,而没有选择以其他用户身份登录的选项