升级后sugarcrm文件下载错误
sugarcrm fileDownload error after upgrade
我升级sugar7.8后收到这个错误,它调用了我的文件下载。
{"error":"need_login","error_message":"No valid authentication for user."}
经过一些调查发现 sugar 升级了对 OAuth 的 API 调用。以下是我的代码:
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
});
},});
我检查了下面的细节url:但是我无法将标头添加到 HTTPS 请求中,有人可以帮忙吗?
https://developer.sugarcrm.com/2016/11/15/security-changes-coming-in-sugar-7-8/
我从未使用过(或听说过)SugarCRM,但您似乎需要将您的授权令牌从 url 移至 HTTP-header。具体如何在 api.fileDownload() 的内置函数调用中设置 header 很难说(并且无法在网上找到描述该函数的单个文档)。但想法是从 url 中删除令牌,然后很可能将 header 作为某种参数发送:
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 中所述简单地更改设置:
"If you want to enable this feature again, then you can use a new SugarConfig setting called allow_oauth_via_get. When the config setting is true, this will permit the oauth_token URL parameter to be used to pass access tokens."
编辑:所以我相信我在 https://github.com/askhogan/sugarcrm/blob/master/index.js
找到了 .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 的帮助下处理身份验证?
除此之外,该函数似乎没有设置任何 header-fields 的选项(它似乎读取的唯一选项是 iframe 选项,它似乎对您没有帮助)。
经过大量研究,我想出了解决这个问题的方法。
注: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
我升级sugar7.8后收到这个错误,它调用了我的文件下载。
{"error":"need_login","error_message":"No valid authentication for user."}
经过一些调查发现 sugar 升级了对 OAuth 的 API 调用。以下是我的代码:
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
});
},});
我检查了下面的细节url:但是我无法将标头添加到 HTTPS 请求中,有人可以帮忙吗?
https://developer.sugarcrm.com/2016/11/15/security-changes-coming-in-sugar-7-8/
我从未使用过(或听说过)SugarCRM,但您似乎需要将您的授权令牌从 url 移至 HTTP-header。具体如何在 api.fileDownload() 的内置函数调用中设置 header 很难说(并且无法在网上找到描述该函数的单个文档)。但想法是从 url 中删除令牌,然后很可能将 header 作为某种参数发送:
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 中所述简单地更改设置:
"If you want to enable this feature again, then you can use a new SugarConfig setting called allow_oauth_via_get. When the config setting is true, this will permit the oauth_token URL parameter to be used to pass access tokens."
编辑:所以我相信我在 https://github.com/askhogan/sugarcrm/blob/master/index.js
找到了 .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 的帮助下处理身份验证?
除此之外,该函数似乎没有设置任何 header-fields 的选项(它似乎读取的唯一选项是 iframe 选项,它似乎对您没有帮助)。
经过大量研究,我想出了解决这个问题的方法。
注: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