FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

iOS SDKで匿名認証を使い続けるには

f:id:mbaasdevrel:20180806093819p:plain

匿名認証は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 が漏洩したりしないよう、注意してください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。