android - 仅使用经过身份验证的用户写入 Firebase 数据库 android

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

我正在尝试从 Android 写入 Firebase。我只希望经过身份验证的用户能够写入数据库。我该怎么做?

这是我尝试写入数据库的注册 fragment :

public class register_fragment extends Fragment {

    public static final String FIREBASE_URL = "my_apps_url";

    private FirebaseAuth mAuth;
    private Firebase mRootRef;

    public String studentIdString, emailString, passwordString;

    Snackbar mSnackbar;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.register_layout, container, false);
        Button mRegister = (Button) view.findViewById(R.id.green_register_button);
        final EditText mStudentId = (EditText) view.findViewById(R.id.student_id);
        final EditText mEmail = (EditText) view.findViewById(R.id.register_email);
        final EditText mPassword = (EditText) view.findViewById(R.id.register_password);

        mAuth = FirebaseAuth.getInstance();
        mRootRef = new Firebase(FIREBASE_URL);

        mRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                studentIdString = mStudentId.getText().toString();
                emailString = mEmail.getText().toString();
                passwordString = mPassword.getText().toString();
                registerUser(studentIdString,emailString,passwordString);
            }
        });
        return view;
    }

    @Override
    public void onStart(){
        super.onStart();
        //Check if user is logged in
        FirebaseUser currentUser = mAuth.getCurrentUser();
    }

    private void registerUser(String id, String email, String password){

        mAuth.createUserWithEmailAndPassword(email,password)
                .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if(!task.isSuccessful()){
                            mSnackbar = Snackbar.make(getView(),"Error: "+task.getException(),Snackbar.LENGTH_SHORT);
                            mSnackbar.show();

                        }else{
                            mSnackbar = Snackbar.make(getView(),"Successfully Registered",Snackbar.LENGTH_SHORT);
                            mSnackbar.show();
                            registerUser(studentIdString,emailString);//call method to write to Firebase
                            Intent intent = new Intent(getActivity(), ChapelInProgressActivity.class);
                            intent.putExtra("user",user.getEmail());
                            startActivity(intent);
                        }
                    }
                });
    }

    private void registerUser(String id, String email){

        Map<String, Object> updates = new HashMap<>();
        updates.put("id",id);
        updates.put("email",email);
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

        mRootRef.child(user.getUid()).updateChildren(updates);//trying to write to Firebase, but does not work
    }

}

我希望 Firebase 数据库的规则为:

 ".read": "auth != null",
 ".write": "auth != null"

因此只有经过身份验证的用户才能读取和写入

最佳答案

如果您想使用这些规则,则必须在 Firebase 控制台中编辑规则部分。

但是,如果您想检查应用程序中的身份验证状态,您可以使用 AuthStateListener,更多信息如下:

https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseAuth.AuthStateListener

关于android - 仅使用经过身份验证的用户写入 Firebase 数据库 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44526783/

相关文章:

android - FirebaseRecyclerAdapter - populateViewHolder 不访问数据

java - OpenGL : Convert on screen coordinate to OpenGL coordinates

java - NanoHttpd 保存上传的文件

javascript - 插入后如何通过ID获取文档?

android - 将文件上传为 putStream 时 Android 中的 Firebase 存储,在 onProgressListener TaskSnapshot.getTotalByteCount() 中返回 -1

java - 努力使 OnClickListener 为具有自定义 ViewHolder 的 Firebase Recycler UI 工作

java - 在 Samsung Galaxy I7500 Android 手机上进行调试

android - 如何像iPhone或EasyTouch应用程序一样进行Android辅助触摸?

javascript - 解析firebase对象javascript

android - 从微调器中选择项目时未显示 ListView