2017-03-14 9 views
0

ちょっと私は、生徒が自分のスケジュールを保存し、必要なときにアクセスできるようにするアプリに取り組んでいます。 私は自分のスケジュールをfirebaseデータベースに保存して、すべてのユーザーに一意のIDを付け、レッスンの名前と就学時間を子供として一意のIDに保存します。すべてのユーザに生成されたユニークキーを使用してFirebaseデータベースルールを制限します。 (Androidスタジオ)

質問は、すべてのユーザーが自分の一意のキーの下に保存されているデータのみを変更するようにFirebaseルールを設定するにはどうすればよいですか。

それがこの it looks like this

のようなルールは、現在のテストのために公開されて見えます。

答えて

1

-K...の値は有効なFirebase認証UIDではないプッシュIDのようです。だから、私はあなたのユーザーがサインインしていないと感じる。プッシュIDがユーザーを識別するシステムを間違いなく思いつくことができる間、それらのIDはFirebase認証またはFirebaseデータベースセキュリティルールに引き継がれない。正直言って、彼らが引き継ぐのであれば、かなり安全ではないでしょう。

電子メール+パスワードまたはソーシャルプロバイダにサインインせずにユーザーを安全に識別したい場合は、Firebase's anonymous authenticationを使用してください。ユーザーには同じように動作します。サインインする必要はありませんが、Firebaseでは、実際のUIDを持つ適切に認証されたユーザーであることを意味します。そして、コードは同じくらい簡単です:

FirebaseAuth.getInstance().signInAnonymously() 
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      Log.d(TAG, "signInAnonymously:onComplete:" + task.isSuccessful()); 

      // If sign in fails, display a message to the user. If sign in succeeds 
      // the auth state listener will be notified and logic to handle the 
      // signed in user can be handled in the listener. 
      if (!task.isSuccessful()) { 
       Log.w(TAG, "signInAnonymously", task.getException()); 
       Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", 
         Toast.LENGTH_SHORT).show(); 
      } 

      // ... 
     } 
    }); 

と(彼らはアプリを再起動したときにも、それらを再び拾う)ユーザーに署名を検出するために:私はこのカントーを入れてください

FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     FirebaseUser user = firebaseAuth.getCurrentUser(); 
     if (user != null) { 
      // User is signed in 
      Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
     } else { 
      // User is signed out 
      Log.d(TAG, "onAuthStateChanged:signed_out"); 
     } 
     // ... 
    } 
}; 
+0

おかげで、 ?私はどこにでもサインインしたいですか? – Daniel

+0

最初のスニペットは、実際にサインインする場所です.2番目のスニペットは 'onCreate'または' onStart'になければなりません。上記のコピーされた作業コードが含まれているので、私は詳細な説明のために私がリンクしているドキュメントを見てください。 –

関連する問題