ニフクラmBaaSお役立ちブログ

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

スクリプトで権限管理されたデータを取得する

スクリプト機能はサーバサイドで実行されますので、アプリ内でのログイン情報を渡さないと自分だけが見られる、更新や削除を行えるデータを処理できません。今回はそんなデータを処理する方法を紹介します。

まず、要点としてはアプリ内でログインしている必要があります。例えばJavaScript SDKを使っている場合、ログインしているとセッションIDが取得できます。

ncmb.sessionToken

これをスクリプト実行時に渡すようにします。

script.query("sessionToken", sessionToken);

次にスクリプト側でもセッションIDを適用します。

if (req.query.sessionToken) {
  ncmb.sessionToken = req.query.sessionToken;
}

後はデータストアを検索したり、データを削除したりといったことが自由にできるようになります。

例えば以前作成したncmbコマンドを使って処理を行ってみます。スクリプトは次のようになっています。データストアを検索して結果を返すだけです。

var NCMB = require('ncmb');

module.exports = function(req, res) {
  // キーは読み替えてください
  var application_key = 'YOUR_APPLICATION_KEY';
  var client_key      = 'YOUR_CLIENT_KEY';
  var ncmb = new NCMB(application_key, client_key);
  
  if (req.query.sessionToken) {
    ncmb.sessionToken = req.query.sessionToken;
  }
  var Item = ncmb.DataStore("Item");
  Item.fetchAll()
    .then(function(items) {
      res.status(200).json({
        items: items
      })
    });
};

まずセッションを指定しない場合。

$ node bin/ncmb -s session.js -m GET
{ body: '{"items":[{"objectId":"nSGwe0HDFRwJKF0R","createDate":"2016-04-17T18:36:47.850Z","updateDate":"2016-04-17T18:36:47.851Z","acl":{"*":{"read":true,"write":true}},"text":"test"}]}' }

次にセッションを指定した場合。

// トークンは読み替えてください
$ node bin/ncmb -q '{"sessionToken": "YOUR_SESSION_TOKEN"}' -s session.js -m GET
{ body: '{"items":[{"objectId":"nSGwe0HDFRwJKF0R","createDate":"2016-04-17T18:36:47.850Z","updateDate":"2016-04-17T18:36:47.851Z","acl":{"*":{"read":true,"write":true}},"text":"test"},{"objectId":"7Wwh6P7sPmrWwlyM","createDate":"2016-04-17T18:40:42.025Z","updateDate":"2016-04-17T18:40:52.853Z","acl":{"E8iFwMHWM4arKCjO":{"read":true,"write":true}},"text":"test3"},{"objectId":"JSzPTQ91ChcuqLJZ","createDate":"2016-04-17T18:46:42.719Z","updateDate":"2016-04-17T18:46:42.720Z","acl":{"E8iFwMHWM4arKCjO":{"read":true}},"text":"Hello"},{"objectId":"9p9Sr1kkzKRv9ABd","createDate":"2016-04-17T18:48:04.488Z","updateDate":"2016-04-17T18:48:04.489Z","acl":{"E8iFwMHWM4arKCjO":{"read":true}},"text":"Hello"}]}' }

このように結果が変わってきます。

なお、ID/パスワードを送信する方法はセキュリティ上の問題があることと、新しいセッションが発行されると過去のセッションが破棄されてしまう(アプリ内で使えなくなってしまう)ので止めた方が良いでしょう。


このようにしてスクリプト機能を特定のユーザ限定で使うことができます。基本的にはアプリ内でログインして、そのセッションIDを使ってスクリプトを実行するという形になるでしょう。ぜひ参考にしてみてください。