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

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

キーの再生成に柔軟に対応する

mBaaSではキーに何かあった時のために再生成することができます。その際、アプリ側に埋め込んだキーを書き換える必要があります。つまり、アプリを再度ビルドして、リリースし直す必要があり、これは非常に大きな手間でしょう。

そこで、キーを外部ファイルとして置いておき、動的に呼び出すようにしてみます。今回はWebブラウザ上での利用法です。

設定をファイルストアに保存する

アプリケーションキー、クライアントキーを記述したファイルをcofing.jsonとしてファイルストアに保存しておきます。ファイルはHTTPS公開しておきます。

{
  "applicationKey": "70d...934",
  "clientKey": "4d0...dff"
}

設定ファイルを読み込む処理を作る

次に上記のファイルをネットワーク経由で読み込む処理を作ります。読み込んだ内容はlocalStorageに保存します。

const request = require('superagent');
const getConfig = async () => {
  const configUrl = 'https://mbaas.api.nifcloud.com/2013-09-01/applications/TTu...5Hk/publicFiles/config.json';
  const response = await request.get(configUrl).send();
  localStorage.setItem('ncmb', JSON.stringify(response.body));
  return response.body;
}

NCMBを初期化する

二回目以降の実行では設定内容をlocalStorageに保存していますので、それを使います。初回はネットワーク経由で取得します。

// 既にlocalStorageにあればそれを使う
const config = localStorage.getItem('ncmb') ? JSON.parse(localStorage.getItem('ncmb')) : await getConfig();
let ncmb = new NCMB(config.applicationKey, config.clientKey);

テストする

キーが使えるかどうかテストします。使えなければ設定ファイルを取得し直して、そのキーを再設定します。

try {
  // 使えるかテスト
  await ncmb.DataStore('Test').fetch();
} catch (e) {
  // エラー = キーが再生成されている
  const newConfig = await getConfig();
  ncmb.apikey = newConfig.applicationKey;
  ncmb.clientkey = newConfig.clientKey;
  await ncmb.DataStore('Test').fetch();
}

試す

実際に試したところです。キーが再生成されていた場合、初回のデータストアのテスト実行がエラーになります。その場合は設定ファイルを取得し直して、キーを設定し直しています。そして二回目のアクセスでは無事、HTTPステータス200で結果が返ってきます。

f:id:mbaasdevrel:20190521104143p:plain

その次の実行時はlocalStorageからキーを取得しているのでネットワークアクセスはありません。

f:id:mbaasdevrel:20190521104154p:plain

まとめ

このようにすることでキーの再生成に対して強固になります。アプリ内にキーを記述しないので、コーディングも楽になるでしょう。再生成は滅多に行わないと思いますが、万一の際に備えて外部ファイル化しておくと便利です。

中津川 篤司

中津川 篤司

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