首页 > 解决方案 > 如何在创建新用户之前保存已登录的 FirebaseUser

问题描述

我正在尝试使用firebase(身份验证)制作一个应用程序,它允许老师创建他的学生用户,然后向学生发送用户名和密码并让他登录。我的问题是为了这样做,在老师之后正在创建用户,当前用户是学生的,当我尝试执行以下代码时:

private void signStu(String email,String password)
    {
        final FirebaseUser teacher=mAuth.getCurrentUser();
        mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                FirebaseUser student=mAuth.getCurrentUser();
                User newUser=new User(/*data i need to pass to the constructor, doesn't affect the result*/);
                mAuth.updateCurrentUser(teacher);   //Here it passes on the student user and not the teacher
            }
        });
    }

所以看起来 mAuth.getCurrentUser() 之前已经更新到它的所有用法,所以在创建之后,teacher 变量变成了 student 变量。任何人都知道如何解决这个问题,或者解决这个问题的方法?谢谢 !

标签: javaandroidfirebase-authentication

解决方案


FirebaseAuth.getInstance().signOut();退出学生。更多关于之后要做什么的信息:如何让用户在 Firebase 中退出?. 您可以尝试注销用户并重新登录。也许官方 firebase 文档中的某些内容(例如重新验证用户)可能会有所帮助。在此链接中,给出了此示例代码:

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

// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
    .addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            Log.d(TAG, "User re-authenticated.");
        }
    });

显然,如果您想以这种方式处理它,您也可以处理此服务器端。Firebase 踢出当前用户


推荐阅读