背景
最近在做一个Web和Electron共用一份代码的工程,由于使用到了第三方的库(我们是在线地图),该库的认证方式是请求时加key,并且它在后台会校验referer。
于是问题就来了,Electron是运行在本地的,http请求的时候,是不会带有授权Web站点的referer的。导致认证失败,无法调用所需的api接口。
分析
既然HTTP请求发送的时候不带referer,那么我们给他加上去,是不是就可以了呢?
对策
方法1:自定义HTTP协议,在发送请求时,补上referer
//注册自定义协议
protocol.registerStandardSchemes(['app', '自定义协议'], { secure: true})//自定义协议的具体实现
protocol.registerHttpProtocol('自定义协议', (req, cb) =>{
cb({
url: “特定的url地址”,
referrer:"http://被授权的referrer头信息"})
})//发送请求时可以使用 自定义协议://url地址 的形式来发送请求
方法2:修改窗口会话中发送请求前的行为
本来以为方法1以及很完美的解决了问题,但是,在自定义协议认证成功后,在api的使用过程中,api内部主动发送了http请求,这时的api请求没有使用自定义协议,再次认证失败了。于是我想到有个办法,很天真的认为可以解决问题。失败的做法如下&#