You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.2 KiB

import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:get/get.dart';
import '../../../core/utils/logger.dart';
class Google {
String? token = '';
String? email = '';
String? displayName = '';
String? pictureurl = '';
String? id = '';
String? accessToken = '';
// 登录并返回
Future<bool> signInWithGoogle() async {
try {
// 确保用户已经登录,并获取当前用户的身份验证令牌
final currentUser = FirebaseAuth.instance.currentUser;
Logger.d('GoogleLogin', 'Future响应数据: $currentUser');
if (currentUser != null) {
// 这里处理您需要使用这个JWT令牌的逻辑,例如将它存储到本地存储中作为凭据。
email = currentUser.email;
displayName = currentUser.displayName;
id = currentUser.uid;
pictureurl = currentUser.photoURL;
Logger.d('GoogleLogin', 'Future响应数据pictureurl: $pictureurl');
token = await currentUser.getIdToken();
Logger.d('GoogleLogin', 'Future响应数据tokenResult: $token');
// IdTokenResult token1 = await currentUser.getIdTokenResult();
// Logger.d('GoogleLogin', 'Future响应数据token1: $token1');
return true;
} else {
UserCredential userCredential = await loginGoogle();
token = await userCredential.user?.getIdToken();
Logger.d('GoogleLogin', 'Future响应数据tokenResult: $token');
if (token != "") {
return true;
} else {
return false;
}
// Logger.d('GoogleLogin', "user login google: ${userCredential.user?.displayName}");
}
} catch (e) {
Logger.e('GoogleLogin', "Google 登录异常:$e");
return false;
}
}
// Google登录
Future<UserCredential> loginGoogle() async {
Logger.d('GoogleLogin', 'loginGoogle:');
final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
email = googleUser?.email;
id = googleUser?.id;
displayName = googleUser?.displayName;
pictureurl = googleUser?.photoUrl;
Logger.d('GoogleLogin', 'loginGoogle: $googleUser');
Logger.d(
'GoogleLogin', "user login loginGoogle ${email}${id}${displayName}");
// Obtain the auth details from the request
final GoogleSignInAuthentication? googleAuth =
await googleUser?.authentication;
// Create a new credential,
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth?.accessToken,
idToken: googleAuth?.idToken,
);
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithCredential(credential);
}
// 退出Google登录
Future<void> signOutGoogle() async {
// 1. 先退出 Firebase
await FirebaseAuth.instance.signOut();
// 2. 安全退出 Google Sign-In
final googleSignIn = GoogleSignIn();
// 检查当前是否有已登录的 Google 账号
final currentUser = googleSignIn.currentUser;
if (currentUser != null) {
await googleSignIn.signOut();
Logger.d('GoogleLogin', 'Google 账号已退出');
} else {
Logger.d('GoogleLogin', 'Google 未登录,跳过 signOut');
}
}
}