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.
83 lines
2.7 KiB
83 lines
2.7 KiB
import 'package:firebase_auth/firebase_auth.dart';
|
|
import 'package:google_sign_in/google_sign_in.dart';
|
|
import 'package:get/get.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;
|
|
print('Future响应数据: $currentUser');
|
|
if (currentUser != null) {
|
|
// 这里处理您需要使用这个JWT令牌的逻辑,例如将它存储到本地存储中作为凭据。
|
|
email = currentUser.email;
|
|
displayName = currentUser.displayName;
|
|
id = currentUser.uid;
|
|
pictureurl = currentUser.photoURL;
|
|
print('Future响应数据pictureurl: $pictureurl');
|
|
token = await currentUser.getIdToken();
|
|
|
|
print('Future响应数据tokenResult: $token');
|
|
// IdTokenResult token1 = await currentUser.getIdTokenResult();
|
|
// print('Future响应数据token1: $token1');
|
|
|
|
return true;
|
|
} else {
|
|
UserCredential userCredential = await loginGoogle();
|
|
if (token != "") {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
// logger.d("user login google: ${userCredential.user?.displayName}");
|
|
}
|
|
} catch (e) {
|
|
print("Google 登录异常:$e");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Google登录
|
|
Future<UserCredential> loginGoogle() async {
|
|
print('loginGoogle:');
|
|
final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
|
|
email = googleUser?.email;
|
|
id = googleUser?.id;
|
|
displayName = googleUser?.displayName;
|
|
pictureurl = googleUser?.photoUrl;
|
|
print('loginGoogle: $googleUser');
|
|
print("user login loginGoogle ${email}${id}${displayName}");
|
|
|
|
// Obtain the auth details from the request
|
|
final GoogleSignInAuthentication? googleAuth =
|
|
await googleUser?.authentication;
|
|
accessToken = googleAuth?.accessToken;
|
|
token = googleAuth?.idToken;
|
|
print('loginGoogle:googleAuth?.idToken= ${token}');
|
|
print('loginGoogle:googleAuth?.accessToken= ${accessToken}');
|
|
// 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 {
|
|
await FirebaseAuth.instance.signOut();
|
|
await GoogleSignIn().signOut();
|
|
}
|
|
}
|
|
|