我正在尝试创建一个主用户模块,该用户可以删除其他用户。我从其他问题中读到,如果要删除用户,则必须以该用户身份登录。然后,我意识到您可以使用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数据库,并插入了凭证。
我的问题是,将我的用户凭据存储在firebase数据库中并将其恢复的正确方法是什么? 此外,我不知道我所做的是否正确,但我的观点是,我想从某个管理员用户中删除其他用户。为此,在我的主用户模块中,我将存储我的管理员用户凭据,然后我将以将被删除的用户身份登录,删除自己,并使用存储的管理员重新登录管理员用户用户凭证。还有其他方法可以达到这个目的吗?
感谢您的帮助。
修改
每当我这样做时我都会收到错误:
User curUser = dataSnapshot.getValue(User.class);
...在我的用户类中添加AuthCredential实例之前没问题。
答案 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());