匿名認証はID/パスワードを使わずに認証状態を保持できる機能になります。パスワードを入力したりする手間がないのがメリットですが、デバイス単位で異なるという欠点もあります。
また、通常ではセッションが切れてしまうと(通常24時間)、また別なIDを使って認証する必要があります。JavaScript SDKでは匿名認証を実行する際にIDを指定できるのですが、iOS SDKには用意されていません。そこで今回はiOS SDKでも匿名認証を継続する方法を紹介します。
最初に匿名認証を行う
まず最初は普通に匿名認証を実行します。そして、ログインした際に authData カラムに入っている anonymous.id を UserDefaults に保存します。
NCMBAnonymousUtils.logIn { (user, error) in if error != nil { print ("Log in failed") print (error ?? "") } else { print("Logged in") let authData = user!.object(forKey: "authData") as! [String: Any] let uuid = (authData["anonymous"] as! [String: String])["id"] UserDefaults.standard.set(uuid, forKey: "uuid") } }
IDを使って認証する
そしてログアウト処理をしたり、セッションの有効期限が切れていた場合です。まず uuid を UserDefaults から取り出します。
let uuid = UserDefaults.standard.string(forKey: "uuid")
その uuid を使って認証するのですが、若干コードを書く必要があります。ユーザオブジェクトを作り、その authData カラムに対して、anonymous.id を設定します。そして signUpInBackground
メソッドを実行します。
let user = NCMBUser.init() let anonymousDic = ["anonymous": ["id": uuid]] user.setObject(anonymousDic, forKey: "authData") user.signUpInBackground({(error) in if error != nil { print("Error") } else { print("Log in") } })
まとめ
これで匿名認証時に固定されたIDを使えるようになります。この認証方式であれば、一度セッションが切れても同じユーザ情報でACLを設定できます。なお、uuid だけで認証しますので、この uuid が漏洩したりしないよう、注意してください。