【发布时间】:2020-06-20 12:47:04
【问题描述】:
我想制作一个应用程序,其中只有第一次通过应用程序输入电子邮件和密码在 firebase 中通过身份验证的人才能更改或添加 firebase 中的数据/视频,而其他未通过身份验证的用户并且正在使用该应用程序只能阅读/观看管理员添加的视频。
{
"rules": {
".read": true,
".write": "auth.uid === 'userID'"
}
}
以上是firebase代码。简而言之,我只想知道userId 将自动被实际的userId 替换,比如说'adjkekloudh' 或者我们需要用java 编写任何代码,如果是,那么请帮助
这是我在 firebase 中的规则公开时使用的 java 代码,适用于所有经过身份验证的人,但我希望只有管理员应该保持身份验证,并且没有身份验证/登录/注册的用户可以观看视频。
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 按钮适用于用户,以便他们可以直接去到管理员添加的视频列表。
【问题讨论】:
标签: java firebase firebase-realtime-database firebase-security