NIFCLOUD-mbaas / ncmb_js

ニフクラ mobile backend JavaScript SDK
https://mbaas.nifcloud.com
Other
28 stars 27 forks source link

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

Closed Shinsuke-I closed 7 years ago

Shinsuke-I commented 7 years ago

不具合の概要(Description of bug)

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: cannot GET https://mb.api.cloud.nifty.com:443/2013-09-01/classes/M_USER
(403)

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

knight9999 commented 7 years ago

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; 
Shinsuke-I commented 7 years ago

>knight9999様

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

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

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

ncmbsdk commented 7 years ago

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