Файл sugarcrmDownload после обновления

Я получил эту ошибку после того, как обновил сахара7.8, который вызвал мой filedownload.

{"error":"need_login","error_message":"No valid authentication for user."} 

После того, как некоторые исследователи обнаружили, что уровень сахара повысился, API вызывает OAuth. Следующий мой КОД:

  api.fileDownload(api.buildURL("Quotes/" + model.get("id") + "/pdf/download?OAuth-Token=" + api.getOAuthToken()), { success: function() { app.alert.show("pdf_download_api_success", { level: "success", messages: SUGAR.language.get('Quotes', 'LBL_QUOTE_PDF_GENERATED'), autoClose: true }); },}); 

Я проверил detials в следующем URL-адресе: Но я не смог добавить заголовок в запрос HTTPS, может ли кто-нибудь помочь?

https://developer.sugarcrm.com/2016/11/15/security-changes-coming-in-sugar-7-8/

После стольких исследований я придумал решение этой проблемы.

Примечание. Не существует вспомогательного документа для api.fileDownload( для использования OAuth-token .

Поэтому я попытался использовать XMLHttpRequest и он отлично работал.

РЕШЕНИЕ

  var request = new XMLHttpRequest(); request.open('GET', api.buildURL("YOURMODULE/" + model.get("id") + "/pdf/download"), true); request.setRequestHeader('OAuth-Token', api.getOAuthToken()); // UR TOKEN request.responseType = "blob"; request.onload = function (e) { if (this.status === 200) { // `blob` response // create `objectURL` of `this.response` : `.pdf` as `Blob` var file = window.URL.createObjectURL(this.response); var a = document.createElement("a"); a.href = file; /*request.onreadystatechange = function() { if(this.readyState == this.HEADERS_RECEIVED) { console.log(request.getResponseHeader("Content-Type")); } }*/ a.download = request.getResponseHeader("FileName"); document.body.appendChild(a); a.click(); document.body.removeChild(a); }; }; request.send(); 

Проверьте эту ветку, возможно, в будущем могут быть обновления: https://community.sugarcrm.com/message/90474-re-sugarcrm-filedownload-error-after-upgrade?commentID=90474#comment-90474

Я никогда не использовал (или не слышал) SugarCRM, но вам кажется, что вам нужно перенести токен аутентификации с URL на HTTP-заголовок. Точно как установить заголовок во встроенной функции вызовите api.fileDownload (), трудно сказать (и не может найти один документ в Интернете, описывающий функцию). Но идея состоит в том, чтобы удалить токен из URL-адреса, а затем, скорее всего, отправить заголовок как своего рода параметр:

 api.fileDownload(api.buildURL("Quotes/" + model.get("id") + "/pdf/download"), { http-header: "OAuth-Token = " +api.getOAuthToken(), success: function() { app.alert.show("pdf_download_api_success", { level: "success", messages: SUGAR.language.get('Quotes', 'LBL_QUOTE_PDF_GENERATED'), autoClose: true }); },}); 

Другим способом было бы просто изменить настройки, как описано в URL-адресе, который вы опубликовали:

«Если вы хотите снова включить эту функцию, вы можете использовать новую настройку SugarConfig с именем allow_oauth_via_get. Когда параметр конфигурации верен, это позволит использовать параметр oauth_token URL для передачи токенов доступа».

EDIT: Поэтому я считаю, что нашел файл .js по адресу https://github.com/askhogan/sugarcrm/blob/master/index.js

В нижней части функции fileDownload ():

// ping to make sure we have our token, then make an iframe and download away return this.call('read', this.buildURL('ping'), {}, internalCallbacks, {processData: false});

Вы пытались полностью удалить часть токена и просто надеетесь, что библиотека обработает аутентификацию с помощью файлов cookie?

Кроме того, функция, похоже, не имеет возможности установить любые поля заголовка (только вариант, который, по-видимому, читается, является опцией iframe, которая, похоже, вам не поможет).