无法在没有 firebase 的情况下配置 google_sign_in

问题描述 投票:0回答:1

我安装了 google_sign_in 并成功创建了我的 keytool sha 密钥,我配置了我的 google 控制台帐户并创建了凭据(我还启用了 People API)。

我将生成的 keytool 文件传递到 android/app 文件夹中,并将该代码放入 build.grandle 中:

 signingConfigs{
        debug{
            keyAlias 'xxxxx'
            storePassword 'xxxxx'
            storeFile file('xxxxx.jks')
            keyPassword 'xxxxx'
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.debug
        }
        debug{
            signingConfig signingConfigs.debug
        }
    }

我也把它放在清单上:

<activity android:name="com.google.android.gms.auth.api.signin.internal.SignInHubActivity" />

当我运行它时,它仍然给我这样的错误:

I/flutter (32747): PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)

我还忘记了什么?

这是我的颤振代码:

final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: ['email'],
  clientId:"XXXXXXXXXXXX"
);

Future<void> google_LogIn(BuildContext context) async {
  try {
    print(1);
    final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
    print(2);
    if (googleUser != null) {
      final GoogleSignInAuthentication googleAuth =
          await googleUser.authentication;
      print(3);
      print('Token : ${googleAuth.idToken!}');
      final response = await http.post(
        Uri.parse('${dotenv.env['baseUrl']}/auth_google'),
        headers: <String, String>{
          'Content-Type': 'application/json; charset=UTF-8',
        },
        body: jsonEncode(<String, String>{
          'idToken': googleAuth.idToken!,
        }),
      );

      if (response.statusCode == 200) {
        final Map<String, dynamic> user = jsonDecode(response.body);
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
              content: Text('Sign in successful! Welcome ${user['name']}')),
        );
      } else {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Failed to sign in with Google')),
        );
      }
    }
  } catch (error) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Error occurred during Google sign in: $error')),
    );
    print(error);
  }
}

还有我的节点服务器:


const { OAuth2Client } = require('google-auth-library');

    //Google Auth
    async auth_google(req, res) {
        try {
            const token = req.body.idToken;
            const payload = await logIn_Controller.verify(token);
            res.status(200).json(payload);
          } catch (error) {
            res.status(401).json({ error: 'Invalid token' });
          }
    },
    
    
    async verify(token) {
        const ticket = await client.verifyIdToken({
          idToken: token,
          audience: CLIENT_ID,
        });
        const payload = ticket.getPayload();
        return payload;
    },

当我尝试打印时,令牌也为空。

有时,如果我评论范围和 clientId,它会这样说:

I/flutter (18971): Null check operator used on a null value

那么我的问题是什么?

节点服务器甚至没有被触发,因此身份验证有问题,具体在此命令中:

   final GoogleSignInAuthentication googleAuth =
          await googleUser.authentication;

因为第一个返回的是有关用户的一些信息数据。所以我猜测该特定命令中有问题。

flutter google-api google-oauth flutter-dependencies
1个回答
0
投票

我没有使用 Firebase 进行此身份验证流程。

相反,我以这种方式实现

Google Sign-In
。尝试一下看看它是否适合您的代码:

final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: <String>[
    'email',
    'https://www.googleapis.com/auth/contacts.readonly',
  ],
);

GoogleSignInAccount? googleUser;

// Handling Google Sign-In
Future<GoogleSignInAccount?> handleGoogleSignIn() async {
  try {
    googleUser = await _googleSignIn.signIn();
    if (googleUser != null) {
      await createUserFromGoogleSignIn(googleUser!);
    }
    return googleUser;
  } catch (error) {
    print('Google Sign-In error: $error');
    return null;
  }
}

// Creating a user account from Google Sign-In information
Future<void> createUserFromGoogleSignIn(GoogleSignInAccount user) async {
  var googleKey = await user.authentication;
  print("Google Access Token: ${googleKey.accessToken}");
  // Call API to authenticate or create a new user account
}

让我知道该解决方案是否适合您的情况!

© www.soinside.com 2019 - 2024. All rights reserved.