【发布时间】:2019-06-14 05:24:03
【问题描述】:
我已经在第一次启动应用程序时使用谷歌创建了身份验证,并且我有自己的_authenticatedUser,它存储用户令牌以供进一步请求。
final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = GoogleSignIn();
Future<String> signInGoogle() async {
GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
GoogleSignInAuthentication gsa = await googleSignInAccount.authentication;
FirebaseUser user = await firebaseAuth.signInWithGoogle(
idToken: gsa.idToken, accessToken: gsa.accessToken);
var token = await user.getIdToken();
_authenticatedUser = User(id: user.uid, email: user.email, token: token, photo: user.photoUrl);
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('loggedin', 'Google');
prefs.setString('token', token);
prefs.setString('userEmail', user.email);
prefs.setString('userId', user.uid);
prefs.setString('userImage', user.photoUrl);
return 'okay';
}
然后我在initState() 中调用getCurrentUser() 函数来检查用户是否存在,但是当令牌过期时,我会得到带有过期令牌的错误用户。
Future<FirebaseUser> getCurrentUser() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
if (user != null) {
print('signed in');
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString('token');
String uid = prefs.getString('userId');
String email = prefs.getString('userEmail');
String photo = prefs.getString('photo');
_authenticatedUser = User(email: email, id: uid, token: token, photo: photo);
return user;
} else {
print('user is null');
return null;
}
}
请有人解释一下如何解决这个问题?
我根据main.dart文件中getCurrentUser的返回重定向用户。
【问题讨论】:
-
您找到解决方案了吗?我有类似的问题..插件只返回 idtoken 但是当用户登录谷歌时我需要刷新令牌..
-
@user2570135 你找到解决方案了吗?我遇到了同样的问题。我需要 refreshToken,已经有 idToken 并且有效!
标签: android firebase flutter firebase-authentication