使用 google 登录创建 firebase 用户 .getCurrentUser() 返回 null
Posted
技术标签:
【中文标题】使用 google 登录创建 firebase 用户 .getCurrentUser() 返回 null【英文标题】:create firebase user with google login .getCurrentUser() returns null 【发布时间】:2019-03-15 19:13:49 【问题描述】:简单问题:我想使用从
获得的凭证 GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
和
private GoogleSignInAccount konto;
private void handleSigninResult(GoogleSignInResult googleSignInResult)
if (googleSignInResult.isSuccess())
konto = googleSignInResult.getSignInAccount();
后来我尝试使用 firebaseAuth 玩一点: 在 oncreate 方法中:
firebaseAuth = FirebaseAuth.getInstance();
firebaseListener = new FirebaseAuth.AuthStateListener()
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth)
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser != null)
Log.d(TAG, "firebase user " + firebaseUser.getUid() + " - " + firebaseUser.getEmail());
else
Log.d(TAG, "No firebase user ");
;
后来在 onStart 方法中我调用了这个方法:
private void firebasewithGoogle(GoogleSignInAccount acc)
Log.d(TAG, "firebasewithGoogle " + acc.getId());
AuthCredential authCredential = GoogleAuthProvider.getCredential(acc.getIdToken(), null);
firebaseAuth.signInWithCredential(authCredential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>()
@Override
public void onComplete(@NonNull Task<AuthResult> task)
if (task.isSuccessful())
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success");
currentUser = firebaseAuth.getCurrentUser();
else
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.getException());
//Snackbar.make(findViewById(R.id.main_layout), "Authentication Failed.", Snackbar.LENGTH_SHORT).show();
);
永远不会调用“onComplete”方法,因为 firebase 用户身份验证数据库中没有用户。
使用 googleSignin 用户时如何创建用户? 对于电子邮件和 PW
firebaseAuth.createUserWithEmailAndPassword()
被使用。有没有办法对为谷歌提供者检索到的“.getIdToken()”做同样的事情? 或:
AuthCredential authCredential = GoogleAuthProvider.getCredential(acc.getIdToken(), null);
感谢任何提示。
编辑 1
我在示例中设置了一个精确的类:https://github.com/firebase/quickstart-android 用于 GoogleSignInActivity.java 一切正常,除了 firebase 的用户身份验证失败。 所以我猜 Firebase 控制台设置有问题。
Google 提供程序已启用 不需要电子邮件密码,因此已禁用 Web 客户端 ID(来自控制台)传递给 GoogleSignInOptions 的 .requestIdToken("")有谁知道哪里出了问题?
编辑 2 任务:
.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>()
@Override
public void onComplete(@NonNull Task<AuthResult> task)
抛出:
com.google.firebase.FirebaseException: An internal error has occurred. [ Identity Toolkit API has not been used in project XXXXXXXX before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/identitytoolkit.googleapis.com/overview?project=XXXXXXXXXXXX then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry. ]
【问题讨论】:
firebase.google.com/docs/auth/android/manage-users 说您通过调用 createUserWithEmailAndPassword 方法或首次使用联合身份提供商(例如 Google Sign-In 或 Facebook)登录用户,在 Firebase 项目中创建一个新用户登录。但是我的用户没有创建 我已经在我的一篇教程中逐步解释了使用 Google 和 Firebase 的整个身份验证过程。 谢谢你的评论,我会看看它。 我看了非常不错的教程,但是您没有在 firebase 控制台中包含身份验证设置?我认为您让所有用户都可以读取和写入数据库? 是的,我跳过了最简单的部分,即如何将 Firebase 添加到您的项目中。依赖项的版本也在不断变化。顺便说一句,我总是建议您使用最新版本。是的,它仅用于测试目的。 【参考方案1】:所以,在 firebase 支持的帮助下,我把它整理出来了:
身份Toolkit API已启用之后我下载了 google-services.json 配置文件。
确认您在应用中使用的是最新的 google-services.json 配置文件,这一点非常重要。转到 Firebase 控制台中的“项目设置”并重新下载。将其放在应用目录内的应用文件夹中,然后重新编译您的应用。
【讨论】:
以上是关于使用 google 登录创建 firebase 用户 .getCurrentUser() 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
使用 google 登录创建 firebase 用户 .getCurrentUser() 返回 null
在 React 中使用 Firebase 进行 Google 登录以进行 chrome 扩展