前回まででTodoアプリのバックエンドをmBaaSに置き換えました。しかし、このままではデータが誰でも閲覧できたり、編集や削除できる状態です。自分のデータをセキュアに管理するためにはACL(アクセス制限)を設ける必要があります。
ACLを設ける場合には、ユーザとしてログインしている必要がありますが、IDやパスワードの設定は面倒です。そこで使えるのが匿名認証です。今回は匿名認証を用いてデータを簡単にセキュアにする方法を紹介します。
管理画面での設定
まず、管理画面で匿名認証を有効にする必要があります。有効にしていないと下記のようなエラーメッセージが出てしまいます。
Optional(Error Domain=com.nifty.cloud.mb Code=403005 "anonymous must not be entered." UserInfo={NSLocalizedDescription=anonymous must not be entered.})
匿名認証の実装
実装は簡単です。まずすでにログインしているかどうかを取得します。これは NCMBUser.current()
で取得できます。この返り値が nil
でない場合はログインできていますので匿名認証を行う必要がありません。
NCMB.setApplicationKey(keys.applicationKey , clientKey: keys.clientKey) let currentUser = NCMBUser.current() if currentUser != nil { return true }
匿名認証は NCMBAnonymousUtils.logIn
で行います。
NCMBAnonymousUtils.logIn { (user, error) in if error != nil { print ("Log in failed") print (error) } else { print("Logged in") } }
ログインできれば、後はデータの取得を行う際には自動的にACL情報を付与してくれます。
データの保存
データを保存する際にはACL情報を設定します。具体的には NCMBACL.init()
を実行し、そのACL情報に対して acl.setReadAccess(true, for: NCMBUser.current())
などでユーザ情報を紐付けます。そして NCMBObject
の acl
メソッドに対して作成したACLオブジェクトを設定します。
let acl = NCMBACL.init() acl.setPublicReadAccess(false) acl.setPublicWriteAccess(false) acl.setReadAccess(true, for: NCMBUser.current()) acl.setWriteAccess(true, for: NCMBUser.current()) let obj = NCMBObject(className: "todoClass") obj?.acl = acl
これで保存を行うとACL情報が設定されたデータが保存されます。
まとめ
匿名認証を使うことでユーザはIDやパスワードを設定する手間がなくなります。ぜひご利用ください!