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
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');
|
|
}
|
|
}
|
|
}
|
|
|