不知何故,Firebase 身份验证在我的实现中不起作用。我在 Firebase Codelab 之后使用 Firebase 身份验证实现了 Google SignIn ,但将 ensureLoggedIn
函数更改为:
Future<Null> _ensureLoggedIn() async {
GoogleSignInAccount user = googleSignIn.currentUser;
print('SIGNIN');
if (user == null) user = await googleSignIn.signInSilently();
if (user == null) {
user = await googleSignIn.signIn();
print('LOGIN');
}
if (auth.currentUser == null) {
GoogleSignInAuthentication credentials =
await googleSignIn.currentUser.authentication;
await auth.signInWithGoogle(
idToken: credentials.idToken,
accessToken: credentials.accessToken,
);
print('CURRENTUSER');
}
}
我在其中使用控制台输出来验证执行了函数的哪些部分。每次启动应用程序时都会调用函数,方法是在 main()
函数中调用它作为
main() async{
new LinearProgressIndicator(backgroundColor: Colors.lightGreen,);
await _ensureLoggedIn();
runApp(new SpringsterApp());
}
不过我注意到,尽管每次用户尚未登录时都会出现设备上可用 Google 帐户的登录提示,ensureLoggedIn
函数的最后一部分(if ( auth.currentUser == null)
) 永远不会被执行,无论用户是否登录。
我注意到这一点是因为 print('CURRENTUSER');
从未在控制台中输出过,另外因为在 Firebase Auth 控制台中没有创建新用户。有谁知道为什么会这样以及我该如何解决这个问题?
我的Firestore安全规则设置为auth only,所以只要出现这个错误就不能写入或读取数据。提前致谢!
最佳答案
对于任何感兴趣的人,我能够按计划登录:
Future<Null> _ensureLoggedIn() async {
GoogleSignInAccount user = googleSignIn.currentUser;
if (user == null) user = await googleSignIn.signInSilently();
if (user == null) {
final GoogleSignInAccount googleUser = await googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
final FirebaseUser user = await auth.signInWithGoogle(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
assert(user.email != null);
assert(user.displayName != null);
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await auth.currentUser();
assert(user.uid == currentUser.uid);
}
}
关于Firebase Auth 在 Flutter 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48870264/