java код, если мы хотим, чтобы только тот человек, который аутентифицирован в firebase, мог писать, в то время как другие могут читать, которые не аутентифицированы - PullRequest
0 голосов
/ 20 июня 2020

Я хочу создать приложение, в котором только человек, который аутентифицирован в firebase, впервые введя свой адрес электронной почты и пароль через приложение, может изменить или добавить данные / видео в firebase, но другой пользователь, который не аутентифицирован и используют приложение, могут только читать / смотреть видео, добавленные администратором.

{
  "rules": {
    ".read": true,
    ".write": "auth.uid === 'userID'"
  }
}

Выше приведен код firebase. Проще говоря, я просто хочу знать, что userId будет автоматически заменен фактическим идентификатором пользователя, скажем 'adjkekloudh', или нам нужно написать любой код в java, если да, то что, пожалуйста, помогите

Это код java, который я использовал, когда правила в firebase опубликованы. c предназначен для всех, кто аутентифицирован, но я хочу, чтобы только администратор оставался аутентифицированным, а пользователь без аутентификации / loign / signup мог смотреть видео.

public class MainActivity extends AppCompatActivity {

    private FirebaseDatabase database;
    private DatabaseReference databaseReference;
    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthListener;
    private static final String TAG = "MainActivity";

    private EditText email;
    private EditText password;
    private Button login;
    private Button signUp;
    private Button iamUser;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        email = (EditText) findViewById(R.id.ETemailaddressID);
        password = (EditText) findViewById(R.id.ETPasswordID);
        login =(Button) findViewById(R.id.loginBtnID);
        signUp =(Button) findViewById(R.id.signUpBtnID);
        iamUser = (Button) findViewById(R.id.iamUserID);


        mAuth = FirebaseAuth.getInstance();
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        //final DatabaseReference mref = database.getReference("message");

        mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

                FirebaseUser user = firebaseAuth.getCurrentUser();

                if(user != null){
                    // user is singned in
                    Toast.makeText(MainActivity.this,"Signed In",Toast.LENGTH_LONG).show();
                }
                else{
                    // user is not signed in
                    Toast.makeText(MainActivity.this,"No such user exists!",Toast.LENGTH_LONG).show();
                }
            }
        };

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String emailString = email.getText().toString();
                String pwd = password.getText().toString();

                if(!emailString.equals("") && !pwd.equals("")){
                    mAuth.signInWithEmailAndPassword(emailString,pwd)
                            .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {

                            if(!task.isSuccessful()){

                                Toast.makeText(MainActivity.this,"Wrong email or password",Toast.LENGTH_LONG).show();
                            }else{

                                Toast.makeText(MainActivity.this,"Signed In",Toast.LENGTH_LONG).show();

                                // we can now write to database

                               // Customer customer = new Customer("Disha","sonalname@gmail.com","Namdev",19);
                               // mref.setValue(customer);
                                Intent intent = new Intent(MainActivity.this, UploadVideo.class);
                                startActivity(intent);
                                finish();
                            }

                        }
                    });
                }
            }
        });

        signUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                startActivity(new Intent(MainActivity.this, SignUpActivity.class));
            }
        });

        iamUser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                startActivity(new Intent(MainActivity.this, ShowVideoActivity.class));
            }
        });


    }

    @Override
    protected void onStart() {
        super.onStart();

        mAuth.addAuthStateListener(mAuthListener);
    }

    @Override
    protected void onStop() {
        super.onStop();

        if(mAuthListener != null){
            mAuth.removeAuthStateListener(mAuthListener);
        }
    }
}

ПРИМЕЧАНИЕ. Здесь кнопка регистрации предназначена для администратора / начальника, который в первый раз введет свой адрес электронной почты и пароль, а кнопка входа снова предназначена для администратора, чтобы добавить данные в firebase, а кнопка i_am_user предназначена для пользователю, чтобы он мог напрямую go к списку видео, добавленных администратором.

1 Ответ

0 голосов
/ 20 июня 2020

Если вы хотите, чтобы любой аутентифицированный пользователь мог записывать файлы, вы можете использовать

".write": "auth.uid != null"

. Я бы рекомендовал сделать правила немного более жесткими, чтобы они соответствовали логике вашего приложения c в этом случае, как и в случае с вышеуказанным, любой может войти в систему и заменить / удалить всю вашу базу данных одним вызовом API. В документации для правил безопасности есть несколько отличных примеров для этого.

Если вы хотите, чтобы только определенный c пользователь записывал файлы, вам нужно будет знать их UID и вручную добавить его в свое правило. Это не происходит (и не может) происходить автоматически.

...