IDやパスワード入力などが不要で、その端末だけで利用できるデータを保存したり検索できる匿名認証機能。便利な機能ですが、あくまでも匿名なので認証が切れてしまうとそのデータを扱えなくなってしまいます。
そこで今回は匿名認証を継続する方法について紹介します。JavaScript SDKでの実装例ですが、他のSDKでも利用法は変わりません。
匿名認証を行う
まず最初に匿名認証を行う必要があります。管理画面で設定を有効にします(アプリ設定の中にあります)。
有効にした後、例えばJavaScript SDKであれば次のように実行します。
(async () => { const ncmb = new NCMB(applicationKey, clientKey); const user = await ncmb.User.loginAsAnonymous(); console.log(user); })();
そうすると、認証後のユーザ情報は次のようになります。
User { authData: { anonymous: { id: '9a1f267e-a0ee-8dbb-33ae-b1f820ecffc3' } }, createDate: '2018-07-04T05:33:58.437Z', objectId: 'DxJbYwiGHAUXSr5Q', userName: '4FVkDowRfe', mailAddress: null, mailAddressConfirm: false, sessionToken: 'AZYvFoRI7GGwe8LwU9KpIKn9E', updateDate: '2018-07-04T05:34:14.076Z' }
この時の id 9a1f267e-a0ee-8dbb-33ae-b1f820ecffc3
を localStorage やindexedDBなどの恒久的ストレージに残しておきます。
二回目以降の認証
もしセッションが切れている場合には、この id を指定して匿名認証を行います。
(async () => { const ncmb = new NCMB(applicationKey, clientKey); const user = await ncmb.User.loginAsAnonymous('9a1f267e-a0ee-8dbb-33ae-b1f820ecffc3'); console.log(user); })();
そうすると以下のように返ってきます。
User { authData: { anonymous: { id: '9a1f267e-a0ee-8dbb-33ae-b1f820ecffc3' } }, createDate: '2018-07-04T05:33:58.437Z', objectId: 'DxJbYwiGHAUXSr5Q', userName: '4FVkDowRfe', mailAddress: null, mailAddressConfirm: false, sessionToken: 'FSKijfUQU4WGnZTeGYWzjimem', updateDate: '2018-07-04T05:34:14.076Z' }
見ると分かりますが、sessionTokenこそ変わるものの、他のデータは同じです。つまり最初に匿名認証を行ったユーザと同じユーザとして認証できています。
任意のIDを使う
匿名認証で使うIDのフォーマットは [a-f0-9]{8}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{8}
といったUUIDのフォーマットに沿っていれば任意のものを使えます。デフォルトでは自動で生成します。
まとめ
認証のセッションは数日で切れてしまいます。匿名認証ではIDが分からなくなると、データの利用ができなくなりますのでストレージなどに保存するようにしましょう。逆にこのIDさえ保存できていれば、利用者は認証を伴わずに自分だけのデータを保存、検索できるようになりますのでユーザビリティが向上するでしょう。ぜひご利用ください。