Просмотр исходного кода

companion: pass token through postMessage as JSON, fixes #1424

Thanks to @serverdevil for the investigation!
Renée Kooi 6 лет назад
Родитель
Сommit
156e86e93c

+ 1 - 1
packages/@uppy/companion/src/server/controllers/send-token.js

@@ -42,7 +42,7 @@ const htmlContent = (token, origin) => {
     <head>
     <head>
         <meta charset="utf-8" />
         <meta charset="utf-8" />
         <script>
         <script>
-          window.opener.postMessage({token: "${token}"}, "${sanitizeHtml(origin)}")
+          window.opener.postMessage(JSON.stringify({token: "${token}"}), "${sanitizeHtml(origin)}")
           window.close()
           window.close()
         </script>
         </script>
     </head>
     </head>

+ 11 - 1
packages/@uppy/provider-views/src/index.js

@@ -419,9 +419,19 @@ module.exports = class ProviderView {
         this.plugin.uppy.log(`rejecting event from ${e.origin} vs allowed pattern ${this.plugin.opts.companionAllowedHosts}`)
         this.plugin.uppy.log(`rejecting event from ${e.origin} vs allowed pattern ${this.plugin.opts.companionAllowedHosts}`)
         return
         return
       }
       }
+
+      // Check if it's a string before doing the JSON.parse to maintain support
+      // for older Companion versions that used object references
+      const data = typeof e.data === 'string' ? JSON.parse(e.data) : e.data
+
+      if (!data.token) {
+        this.plugin.uppy.log('did not receive token from auth window')
+        return
+      }
+
       authWindow.close()
       authWindow.close()
       window.removeEventListener('message', handleToken)
       window.removeEventListener('message', handleToken)
-      this.provider.setAuthToken(e.data.token)
+      this.provider.setAuthToken(data.token)
       this.preFirstRender()
       this.preFirstRender()
     }
     }
     window.addEventListener('message', handleToken)
     window.addEventListener('message', handleToken)