Firebase可以避免非法访问存储

时间:2017-09-25 13:25:17

标签: android security firebase firebase-storage

我正在构建Android应用,目前正在整合Google Firebase。我已经建立了一个数据库。由于我的应用会通过Google Firebase存储下载敏感图片,因此只有授权用户才能访问这些图片。在Firebase数据库中,我手动添加了存储中图像的URL(我本来希望自动执行此操作,但我不知道如何操作)。

让不同用户访问Firebase存储中不同图形的最佳方法是什么?

谢谢!

编辑:我已经读过:Google Firebase但是用难以猜测的名字重命名图像,似乎不是最安全的解决方案

1 个答案:

答案 0 :(得分:0)

用户是通过应用上传图片还是您? 如果是这样我可以建议:

拥有私人图片按钮。

onCreate()

中的

 imageButton =  (ImageButton) findViewById(R.id.ibImageSelect);
imageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
            galleryIntent.setType("image/*");
            startActivityForResult(galleryIntent, Gallery_Request);

        }
    });

在方法体外:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == Gallery_Request && resultCode == RESULT_OK) {
        imageUri = data.getData();
        imageButton.setImageURI(imageUri);
    }
}

点击按钮

StorageReference upload = storageReference.child("what you want");
Bitmap bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri); 
ByteArrayOutputStream baos = new ByteArrayOutputStream();
  bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
 byte[] data = baos.toByteArray();
    UploadTask filePath = upload.child(imageUri.getLastPathSegment()).putBytes(data);
 filePath.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

 filePath.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

@Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {


     DatabaseReference newPost = mref.push(); //this generates a random unique key 
replace with your own if you want, since you already got your own structure



    newPost.child("image").setValue(imageUri.getLastPathSegment()); 
//set image name so can use this to download the image

    }
     });

你可以拥有&#34;状态&#34;数据的每个节点中的子节点,然后在下载循环遍历所有节点的图像时,检查状态是否是您想要的状态。然后获取图像下载密钥。

下载图片:

循环遍历节点和子节点,获取img url,

    String ref = "image folder in firebase storage/" + imgurl;
                storageRef.child(ref).getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
                    @Override
                    public void onSuccess(byte[] bytes) {
                        // Use the bytes to display the image
                          final  Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
ImageView iv = (ImageView) findViewByID(R.id...);

iv.setImageBitmap(bitmap);



                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        Log.i("error", exception.getMessage());
                    }
                });