スクリプト機能ではmBaaSを操作することが多いかと思います。そんな時、アプリケーションキーやクライアントキーをハードコーディングしてしまうとコードを共有したり、キーの再生成に伴うスクリプトの更新が発生します。
そこで今回はスクリプトを公開しても問題ない形で作成する方法を紹介します。なお利用できるケースは限られるので注意してください。
キーをSDKから送信する
方法は簡単で、クライアントキーをスクリプトを利用する側から送るのです。特に手軽な方法として、ヘッダーを利用するのが良いでしょう。例えばJavaScript SDKであれば次のように実装します。client_keyにアプリのクライアントキーが入っていることとします。今回は X-NCMB-CLEINT-KEY としていますが、これは自分で好きな名称を使えます。
ncmb.Script .set({"X-NCMB-CLEINT-KEY": client_key}) .data({"message": "Hello World"}) .exec("POST", "testScript.js") .then(function(res){ // 実行後処理 console.log(res); }) .catch(function(err){ // エラー処理 console.log(err) });
そしてmBaaSにアップロードされたスクリプト側では次のように実装します。
let NCMB = require('ncmb'); module.exports = function(req, res) { const application_key = req.header("x-ncmb-application-key"); const client_key = req.header("x-ncmb-cleint-key"); let ncmb = new NCMB(application_key, client_key); // 以下は通常の実装 }
ここで注意点としては、ヘッダーのキーを指定する時には小文字で指定する必要があるということです。なので x-ncmb-cleint-key と指定しています。アプリケーションキーは元々ヘッダーに含まれていますので、 x-ncmb-application-key と指定して取得できます。この2つのデータを使えばキーをハードコーディングすることなくNCMBオブジェクトが使えるようになります。
アプリケーションからは使わないようにしましょう
なお、この方法はスマートフォンアプリ(特に一般公開しているもの)では使わないようにしましょう。アプリのネットワークを監視することでクライアントキーが見えてしまうからです。信頼できるアプリ(専用の管理用アプリ)であったり、サーバサイドからの利用などに限定するのが良いでしょう。
個人的にはスクリプトのコードを公開、共有することが多いのでそうした時にハードコーディングすることなく実装できるのはメリットがあります。本来であれば環境変数として取得できると便利なのですが今のところありませんのでこうした実装がベターではないでしょうか。
スクリプト作成時の参考にしてください。