Firebase Auth:无法实例化AuthCredential

时间:2017-04-17 04:00:48

标签: android firebase firebase-realtime-database firebase-authentication

我正在尝试创建一个主用户模块,该用户可以删除其他用户。我从其他问题中读到,如果要删除用户,则必须以该用户身份登录。然后,我意识到您可以使用firebase auth存储的凭据信息登录。 (作为参考,我使用谷歌,脸书和电子邮件方法)。

我还在Firebase数据库中存储了一个与Firebase Auth对应的用户实体。这是我的用户类:

public class User {
        // variables.
        private String appId;
        private String email;
        private String name;
        private String description;
        private String photoUrl;
        private boolean isAdmin;
        private boolean isSuspended;
        private boolean isDeleted;
        private AuthCredential credential;

        // all those getters and setters go here.
}

请注意,我在我的用户中存储了一个AuthCredential实例,这是我第一次在注册此用户时设置的(或使用facebook和google登录)。 每当我注册/登录时,我都会收到此错误:

java.lang.RuntimeException: java.lang.InstantiationException: can't instantiate class com.google.firebase.auth.AuthCredential

但是,我检查了我的firebase数据库,并插入了凭证。

1. FirebaseAuth using email and password. 使用电子邮件和密码验证Firebase。

2. FirebaseAuth using google provider 使用Google提供商进行Firebase验证。

我的问题是,将我的用户凭据存储在firebase数据库中并将其恢复的正确方法是什么? 此外,我不知道我所做的是否正确,但我的观点是,我想从某个管理员用户中删除其他用户。为此,在我的主用户模块中,我将存储我的管理员用户凭据,然后我将以将被删除的用户身份登录,删除自己,并使用存储的管理员重新登录管理员用户用户凭证。还有其他方法可以达到这个目的吗?

感谢您的帮助。

修改

每当我这样做时我都会收到错误:

User curUser = dataSnapshot.getValue(User.class);

...在我的用户类中添加AuthCredential实例之前没问题。

3 个答案:

答案 0 :(得分:0)

AuthCredential是一个抽象类,无法实例化抽象类,因此每当您注册时都会出现错误。 https://firebase.google.com/docs/reference/android/com/google/firebase/auth/AuthCredential

答案 1 :(得分:0)

private FirebaseAuth firebaseAuth;

   firebaseAuth = FirebaseAuth.getInstance();


    //logging in the user
    firebaseAuth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    progressDialog.dismiss();
                    //if the task is successfull 
                    if(task.isSuccessful()){
                        //start the activity
                        finish();
                        startActivity(new Intent(getApplicationContext(), Activity.class));
                    }
                }
            });

答案 2 :(得分:0)

对于电子邮件:

AuthCredential credential = EmailAuthProvider
  .getCredential("user@example.com", "password1234");

对于Google,您需要GoogleSignInAccount idToken docs

AuthCredential credential = GoogleAuthProvider
  .getCredential(acct.getIdToken(), null);

对于facebook,您需要facebook AccessToken getToken()docs

AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());