2

"myapp.firebase.io/events"ノードのアクセス権が、認証されたユーザ(firebase authで認証されたユーザ)のみにアクセスする必要があります。私のルールはFirebaseエラー:認証されたユーザの許可が拒否されました

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

をIS-そして、私の活動は次のとおりです。ここで

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 APIで従来のFirebaseを混在させているようです。

//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が含まれており、新しいFirebase APIを使用してデータベースの参照を取得する方法についてこのguideに従ってください。

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

私はあなたが正しくそれとして、既にFirebase Authを実装していると仮定しています認証されたユーザーがいるようです。

+0

実際、初心者としては、新しい&前のSDKの使用が混在しています。今私の問題は修正されました。ありがとう。 –

+0

私にも起こった。 :) –

+0

@Ajoy Das - 私は同じ問題を抱えていましたし、クイックフィックスはルールを更新することでした{".read":true}、読み込みアクセスの場合のみ、やや類似した投稿を簡単な方法で解決するアイデアを得ることができますhttp://stackoverflow.com/questions/14296625/restricting-child-field-access-with-security-rules –

関連する問題