概要
前回 アノニマス認証の方法を紹介しました
今回は認証後に Firebase のリアルタイム Database にアクセスしてみたいと思います
データベースのルールを変更することで認証しているかどうかでアクセスできるかできないかも検証してみます
環境
- macOS X 10.12.5
- Xcode 8.3.3 (8E3004b)
- Firebase/Core/Auth/Database 4.0.2
データベースへのアクセスルール
とりあえず以下のように設定します
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
このルールは「どんなアカウントでもいいので認証済み」であれば read も write もできるルールになります
データベースに保存する
- ViewController.swift
import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase
class ViewController: UIViewController {
var ref: DatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
Auth.auth().signInAnonymously(completion: { (user, error) in
if let e = error {
print(e)
print("login error")
return
}
print(user?.displayName ?? "no displayName")
print(user?.isAnonymous ?? false)
self.ref = Database.database().reference()
// データの保存
self.ref.child("users").setValue(["username": user?.uid])
})
}
}
データベースを参照するための変数「ref」を定義しておきログイン後に接続します (Database.database().reference()
)
そして ref.child.setValue
を使ってデータを保存します
認証に成功するとデータベースに write する権限があるため以下のようにデータが投入されます
権限を変更して挙動を確認する
次に write の権限を変更してみます
{
"rules": {
".read": "auth != null",
".write": false
}
}
false に変更しました
こうすることでデータベースに対してどんなユーザでもアクセスできなくなります
実際にアプリをビルドし直して試してみるとコンソールに
<Warning> [Firebase/Database][I-RDB038012] setValue: or removeValue: at /users failed: permission_denied
というデバッグ文が出力されているのがわかると思います
データを取得する
ついでに取得もやってみましょう
* ViewController.swift
// データの取得
self.ref.child("users").observeSingleEvent(of: .value, with: { (snapshot) in
print(snapshot.value ?? "no value")
})
を保存の下に追記すれば OK です
今回は observeSingleEvent を使いました
リアルタイム Database にはイベントドリブンでデータを取得する方法もありデータが追加されたらイベントが発行され、その都度何か処理する方法もあります
その辺りの方法は参考サイトの URL を参考に試してみてください
やり方はほとんど同じようにできると思います
最後に
Firebase のリアルタイム Database を使ってみました
また今回は使いませんでしたが、イベントドリブンな取得もできるのでチャットアプリなどの開発が捗る機能かなと思います