2

"myapp.firebase.io/events"노드가 인증 된 사용자 (firebase auth에 의해 인증 됨)에만 액세스 할 수 있어야합니다. 내 규칙은 Firebase 오류 : 인증 된 사용자에 대한 사용 권한이 거부되었습니다.

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

을 - 이것도 나의 활동은 다음과 같습니다

public class NotificationActivity extends AppCompatActivity { 
TextView message,header; 
private Toolbar mToolbar; 
String from; 
private Firebase ref; 
private FragmentDrawerNotification mDrawerFragment; 
private FirebaseAuth mAuth; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_notification); 
    mToolbar = (Toolbar) findViewById(R.id.app_bar); 
    setSupportActionBar(mToolbar); 

    mAuth = FirebaseAuth.getInstance(); 

    message = (TextView) findViewById(R.id.tMessage); 
    header = (TextView) findViewById(R.id.tHeader); 

    from=getIntent().getExtras().getString("From"); 
    if(from.equals("Events")) 
    { 
     header.setText("Events: "); 
     message.setText(""); 
     System.out.println(mAuth.getCurrentUser().getEmail()); 
     //System.out.println("Events Auth"+ref.getAuth()); 
     ref = new Firebase("https://myapp.firebaseio.com/events"); 

     ref.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       String data =dataSnapshot.getValue(String.class); 
       message.setText(data); 
      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 

      } 
     }); 

    } 
} 
System.out.println(mAuth.getCurrentUser().getEmail()); 가 올바르게 사용자의 이메일 로그인 반환 여기

하지만 ref.getAuth() 널 (null)을 반환; 로그인 한 사용자는 데이터에 액세스 할 수 없으며 "Firebase Error : permission denied"가 표시됩니다. "이벤트"가 내 키이고 "오늘 이벤트가 있습니다"가 내 값입니다. 내가

{ 
"rules": { 
    "events": { 
     ".read":true, 
     ".write":true 
     } 
    } 
} 

를 사용하는 경우

나는 액세스 할 수 있습니다,하지만 난 인증 된 사용자와 데이터베이스를 확보 할 필요가있다.

답변

0

레거시 Firebase와 새로운 Firebase API를 혼용하는 것 같습니다.

//legacy: com.firebase:firebase-client-android:2.5.2+ 
ref = new Firebase("https://myapp.firebaseio.com/events"); 

//com.google.firebase:firebase-auth:9.4.0 
mAuth = FirebaseAuth.getInstance(); 

프로젝트가 console.firebase.google.com 콘솔에 있습니까? 그런 경우,이 종속성 com.firebase:firebase-client-android:2.5.2+을 제거 com.google.firebase:firebase-database:9.4.0을 포함하고 새로운 중포 기지 API를 사용하여 데이터베이스 참조를 얻는 방법에 대한이 guide 따르십시오 : 당신이 제대로으로 이미 Firebase Auth을 구현 한 가정입니다

//com.google.firebase:firebase-database:9.4.0 
    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference myRef = database.getReference("message"); 

을 인증 된 사용자가있는 것 같습니다.

+0

실제로 새내기는 새로운 & 이전 SDK를 혼합했습니다. 이제 내 문제가 해결되었습니다. 감사. –

+0

나에게도 일어났다. :) –

+0

@Ajoy Das - 나는 똑같은 문제가 있었고 빠른 수정은 규칙을 업데이트하는 것이었다 { ".read": true}. 읽기 액세스 만 가능하고 비슷한 게시물은 간단한 방법으로 해결할 수있다. http://stackoverflow.com/questions/14296625/restricting-child-field-access-with-security-rules –

관련 문제