0

私と同様の問題があったことは知っていますが、Firebase を適切に保護する方法についてはまだ少し困惑しています。

まず、私は EmberFire を使用しています。次に、アカウント管理に Firebase のメール/パスワード認証を使用しています。私のアカウントはそれぞれビジネスを表しています。現在認証されているビジネスが自分のデータにのみアクセスできるようにしたいのですが。最初は、次のデータ構造を使用することを考えていました。

+ businesses
    - uid-1
    - uid-2
    - uid-3

... uid は、Firebase のメール/パスワード認証によってユーザーに割り当てられたものです。次に、次のセキュリティ ルールを使用します。

{
  "rules": {
    "businesses": {
      "$user_id": {
        ".read": "$user_id === auth.uid",
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

以上のことから、2 つの質問があります。

  1. それはうまくいきますか?(この投稿に基づいていることは間違いありません)
  2. もしそうなら、EmberFire が生成したものではなく、自分の ID を使用できるようにするにはどうすればよいですかpush()

UPDATE EmberFireに関して、モデルをFirebaseに保存するために使用しているコードは次のとおりです。

var business = _this.store.createRecord('business', {
    uid: userData.uid,
    businessName: _this.get('businessName'),
    firstName: _this.get('firstName'),
    lastName: _this.get('lastName')
});

business.save().then(function(success) {
    flashMessages.success('Your account has been created! Please login below.');
    _this.transitionToRoute('login');
}, function(error) {
    flashMessages.warning(error);
});

私が見ているのは、これらの作成されたオブジェクトのルート ノードが、Firebase によって生成された一意のタイムスタンプ ID になるということです。私の問題を解決するために、それを auth.uid に上書きしたいと思います。

前もって感謝します!ジェームズ

4

1 に答える 1

2

idを行うときに指定できますcreateRecordidがfirebaseキーなります:

var record = this.store.createRecord('business', {
  id: userData.uid,
  businessName: this.get('businessName'),
  firstName: this.get('firstName'),
  lastName: this.get('lastName')
});

ユーザー レコードを作成する前に、そのレコードがまだ存在していないことを確認したい場合があるため、「検索または作成」フローが必要になります。Ember Data でこの種のフローを実行する場合、いくつかの落とし穴があります。回避策の例は、こちらのコメントで概説されています

于 2015-04-17T18:17:03.313 に答える