前后端分离 通过链接直接导出数据 如何进行权限控制

下载附件或者导出数据为文件的时候
前端可以直接使用如下方式下载

window.location.href='下载链接'
window.open(下载链接)

前后端分离中这种方式不能把token也一起传到后端进行请求,导致权限不够访问不了后端

网上有如下解决方式, 总感觉不优雅

/**
* 导出用户列表
*/
private exportUsers(){
 this.http.doPost({
     url: 'system/sysmanager/user/exportUsers',
     responseType:ResponseContentType.Blob,
     body:this.form,  //传入后端的表单数据
     success: (req, res) => {
         var blob = new Blob([res.json()]); //创建一个blob对象
         var a = document.createElement('a'); //创建一个<a></a>标签
         a.href = URL.createObjectURL(blob); // response is a blob
         a.download = "用户列表.xlsx";  //文件名称
         a.style.display = 'none';
         document.body.appendChild(a);
         a.click();
         a.remove();
     }
 });
}

请问有其它更好的方式吗

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案
  • 1.token拼接到链接上面,后台get方式获取鉴权
  • 2.通过接口请求,后台鉴权、查询数据生成excel文件。返回前端下载地址
3年前 评论
讨论数量: 7
interceptors

去搜一下这个你应该就能知道怎么做了

3年前 评论
fendouweiqian (楼主) 3年前
寻梦 (作者) 3年前
寻梦 (作者) 3年前
cnguu

后端鉴权后直接重定向下载就行了

3年前 评论

首先实现功能才是好的,其次这种下载一般是后台强制浏览器输出比较好(可以鉴权),而不是直接暴露下载链接

3年前 评论
  • 1.token拼接到链接上面,后台get方式获取鉴权
  • 2.通过接口请求,后台鉴权、查询数据生成excel文件。返回前端下载地址
3年前 评论

url 拼 token 用 https 没什么问题

用blob的方式,应该是要等东西下载完,才会弹出保存,这个大文件很不合适

ajax请求,后端鉴权,生成临时链接,前端新窗口打开链接直接下载,这个应该可以

很久没搞过这玩意了,以上只是很久以前弄过的形式,,,不确定还有没有变

3年前 评论
AloneUtopia

我的处理方式是前端正常携带 token 访问接口,生成对应文件然后直接返回下载响应return response()->download($pathToFile)->deleteFileAfterSend(true)

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!