LoginSignup
14
11

More than 3 years have passed since last update.

[Firebase]: 匿名認証を利用する

Last updated at Posted at 2020-03-21

最近サーバとのデータ通信が必要なiOSアプリを作成しているのですが、FirebaseのデータベースサービスであるFirestoreを利用してから数週間経ったある日、こんなメールが、
スクリーンショット 2020-03-21 13.35.03.png

データベースが攻撃に対して脆弱であり、セキュリティルールを厳しくせよとのことでした。

認証されたユーザーからのみアクセスを許可するルールにすれば解決なのですが、ログイン機能を持たせるアプリでもないため、どうしたものか、、、と思案していたところ、Firebaseの匿名認証という機能を発見しました。匿名認証を利用することで、ユーザーにログインを強制することなく、データベースのセキュリティを安全に保つことができます。

Firebase で認証する一時的な匿名アカウントを、Firebase Authentication で作成して使用できます。一時的な匿名アカウントを使用すると、アプリに登録していないユーザーが、セキュリティ ルールで保護されているデータを使用できるようになります。
https://firebase.google.com/docs/auth/ios/anonymous-auth?hl=ja

設定方法は下記の通りです。

匿名認証の実装方法

Authenificaion → ログイン方法 から匿名認証を有効にします。
スクリーンショット 2020-03-21 14.02.34.png

AppDelegaet.swiftにsiginInAnonymously()メソッドを追加すれば、起動時に自動で匿名ユーザーが作成されます。

AppDelegaete.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        FirebaseApp.configure()

        // 匿名認証(下記のメソッドがエラーなく終了すれば、認証完了する)
        Auth.auth().signInAnonymously() { (authResult, error) in
            if error != nil{
                print("Auth Error :\(error!.localizedDescription)")
            }

             // 認証情報の取得
             guard let user = authResult?.user else { return }
             let isAnonymous = user.isAnonymous  // true
             let uid = user.uid
            return
        }
        return true
    }

セキュリティルールの設定方法

認証ユーザーのみ読み取りを許可するよう、Firestoreのセキュリティルールを修正します。

service cloud.firestore {
  match /databases/{database}/documents {
    match /collectionName/{document=**}{
        allow read: if request.auth != null;
    }    
  }
}
14
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11