2017-12-21 15 views
0

인증시 firebase에 주석을 추가 할 수 없습니다.인증 된 Android가 설치된 경우 Firebase에 추가 할 수 없습니다.

내 규칙이 있습니다.

{ 
    "rules": { 
     ".read": true, 
     ".write": "auth != null" 
    } 
} 

사용자가 firebase에 밀어 넣기 전에 null이 아닌지 테스트합니다. 나는 사실에 대한 쓰기의 규칙을 변경하면

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     String baseUrl = "url"; 
     final Firebase fb = new Firebase(baseUrl+"/comments"); 
     final EditText et = (EditText) findViewById(R.id.comment); 
     final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
     Button btn = (Button) findViewById(R.id.send); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if(user != null) 
        fb.push().child("comment").setValue(et.getText().toString()); 
      } 
     }); 
    } 

} 

오류내가 로그

W/RepoOperation: setValue at /comments/-L0shVMfCJWab7_5ltnO/comment failed: FirebaseError: Permission denied

얻을, 그것은 작동합니다.

답변

1

대신 Firebase 인스턴스를 사용하여 DatabaseReference를 사용합니다.

는 여기에 내가 참으로 모두 규칙을 지정할 때 작동 코드

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    String baseUrl = "https://tpdevproject.firebaseio.com/"; 
    final DatabaseReference fb = FirebaseDatabase.getInstance().getReference("comments"); 
    final EditText et = (EditText) findViewById(R.id.comment); 
    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
    Button btn = (Button) findViewById(R.id.send); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(user != null) 
        fb.push().child("comment").setValue(et.getText().toString()); 
      } 
     }); 
    } 

} 
0

당신은 두 규칙이 중포 기지는 console에 해당하는 지정해야합니다

{ 
    "rules": { 
     ".read": true, 
     ".write": true, 
    } 
} 
+0

입니다. – dz00dz

+0

true로 설정하지 않은 경우 firebase에 값을 쓰는 방법을 지정해야합니다. true로 지정하면 쓰기 권한이 있습니다. –

+0

인증없이 데이터를 읽고 사용자가 인증 된 경우에만 데이터를 쓰는 것입니다. 보안 강화). – dz00dz

0

이 시도 :

{ 
    "rules": { 
     ".read": true, 
     ".write": "auth !== null" 
    } 
} 

참고이 함께 쓰기 규칙의 !== 대신 하나의 징후 같습니다.

이 답변은 Firebase documentation on User Based Security의 몇 가지 예를 기반으로합니다.

+0

작동하지 마십시오. 나는 해결책을 찾았고 대신 Firebase를 사용하여 DatabaseRefernce를 사용합니다. – dz00dz