田無rb#10 ~Nuxt.js firebase連携⑥~
ログイン時のみDBの参照、書き込みができるアプリの作成をやっていきます
firebaseの設定
firebaseのコンソールにアクセス => Databaseをクリック => ルールをクリック
DBのルール設定が表示されるので、以下のように修正する(.readと.writeの行)
これでログインしている場合のみ、readとwriteが使えるようになる
{ "rules": { ..., ".read": "auth != null", ".write": "auth != null" } }
コード修正
ログイン、ログアウト処理
ログインは前回と同様、providerを作成してsignInWithPopup
を実行する
ログアウトはsignOut
で行う
// ログイン let provider = new firebase.auth.GoogleAuthProvider(); firebase.auth().signInWithPopup(provider).then(function(result) { ... }) // ログアウト firebase.auth().signOut()
ログインしている時、currentUser
にユーザ情報のオブジェクトが保持される
これはsignInWithPopup
で返されるオブジェクトと同じなので、displayName
などの値を取り出せる
ログアウト時はnull
となるので、ログインしているかどうかの判定にも使える
firebase.auth().currentUser
DB連携
firebase.database()
でDBオブジェクトを取得する。ref
メソッドで参照先を指定する
let db = firebase.database() let ref = db.ref("board")
並び替え、絞り込み
orderByKey()
はキーの昇順でのソート。limitToLast()
は最後のデータから引数(数値)分のデータに絞り込んで取得する
ref.orderByKey().limitToLast(10)
他にも以下のようなソート、絞り込み方法が存在する
ソート
- orderByValue ... 値による並び替え
- orderByChild ... 引数に指定した子ノードの値によって並び替え
絞り込み
- equalTo ... 引数の値と等しいもの
- limitToFirst ... 先頭のデータから引数で指定した件数分
- startAt ... 先頭の値を引数で指定した値とする
- endAt ... 最後の値を引数で指定した値とする
イベント監視
on()
メソッドでvalue
イベントを監視する
value イベントを使用して、データの追加などが行われる度に、その時点での参照先のデータを読み取ることができる
以下の例だとsnapshot.val()
で参照先の値を取り出せる
ref.orderByKey().limitToLast(10).on("value", function(snapshot) { snapshot.val() // 参照先の値 })
データ追加
data
に保存するデータをオブジェクトで用意しておき、参照先(ref(`board/${id}`)
)に対してset
メソッドで保存できる
(ここでは現在時刻をミリ秒に変換したものをidとしている。今回は勉強目的なので問題無さそうだが、完全に重複しないとは言い切れないので実際のシステム開発時は別の方法を検討するのが良いかも)
let data = { foo: this.foo, bar: this.bar, baz: this.baz, } let id = (new Date).getTime() firebase.database().ref(`board/${id}`).set(data)
これにて、「Vue.js & Nuxt.js超入門」の写経はひとまず終了
次は、付録が残っているのでそれをやるか、また別のことをやるかどうしようか、、といったところです