jssdkを呼び出してios上でずっとinvalid signatureの問題の解決を報告します

2692 ワード

問題の説明
vueを用いて微信公衆番号プロジェクトを開発する過程で,微信授権リダイレクトurlの上に付いている/#/がリダイレクト失敗・を招くためhistoryモードを採用することが分かった.hashモードでjssdkを呼び出すのはokですが、historyモードでは初めてページに移動してjssdkを呼び出すのに成功したほか、他のジャンプページでは失敗を提示し、「invalid signature」と報告されています.この問題はiosでのみ発生しますが、ジャンプ後のページがリフレッシュ操作された後、jssdk呼び出しは成功しました.
理由:vue-router切り替え時は操作していたブラウザ履歴で、実際のURLは初めて入ったときのURLです.
ルーティングが変わるたびに署名を再要求し、署名要求を開始するurlパラメータは現在のページのurlでなければならない(注:最初にページに入った時のものではない)微信IOS版:SPAのurlは変わらない微信Android版:SPAのurlは変わる(Android携帯電話ジャンプページは自動的にリフレッシュされるようだ)
解決策
「main.js」ページに次のコードを書きます.
router.beforeEach ((to, from, next) => {
  var u = navigator.userAgent;
  var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios  
  if (isiOS && to.path !== location.pathname) {
    //       location.replace
    location.assign(to.fullPath)
  } else {
    next()
  }
});