NIFCLOUD-mbaas/ncmb_js

iOS10だと正常にデータを取得できない

Closed this issue · 3 comments

不具合の概要(Description of bug)

  • SDKのバージョン(SDK version)
    2.1.2
  • 不具合が発生した環境(Environment requirement)
    iPhone6Plus (iOS:10.0.1)
  • 不具合を再現させる手順・サンプルコード(Step for Reproduce bug / Sample code)
var ncmb = new NCMB(APP_KEY, CLIENT_KEY);
var mUser = ncmb.DataStore("M_USER");
mUser
    .fetchAll()
    .then(function(userResultList) {
        alert(userResultList.length);
    })
    .catch(function(err) {
        alert(err);
    });

「iOS:9.3.5」の場合だとエラーが発生せず、正常にデータを取得出来ます。
※Monacaを使用して、mBaasと連携してます

  • エラーメッセージ(Error messages)
Error: cannot GET https://mb.api.cloud.nifty.com:443/2013-09-01/classes/M_USER
(403)

mBaasからデータを取得する時にエラーになっているようです。

JSで生成しているsignature (Base64化したもの)が、iOS 9.3.5では44文字なのに、
なぜかiOS 10では52文字になってしまっています。このため、signatureが正常に機能
せず、サーバーに弾かれてしまいます。iOSの不具合のようですが、詳細は分かりません。

応急処置として、lib/signature.jsに次のようなパッチを当てれば、強制的に42文字でトリミング
して動作しています。

--- a/lib/signature.js
+++ b/lib/signature.js
@@ -37,5 +37,12 @@ function create(url, method, query, timestamp,
   var sig = crypto
         .createHmac("SHA256", clientkey || this.clientkey)
         .update(sigStr).digest("base64");
+
+  if (sig.length == 52) {
+    sig = sig.substr(0,44);
+  }
+
+  // alert("sig : " + sig);
+
   return sig; 

>knight9999様

詳しい回答ありがとうございます。

Monaca(アシアル様)のテクニカルサポートに問い合わさせていただいた者です。
ソースをいただいておりますので、対応はそちらで行っています。

iOS10かncmb.jsか、正式対応されるまで、
クローズさせないでおきます。

ご迷惑をおかけすることになり、誠に申し訳ございませんでした。
v2.1.3で対応が完了したのでクローズします。