ShopWind电商系统移动端支持账号密码登录、手机验证码登录、微信支付宝等第三方登录。其中用账号密码登录时,如果密码中含有特殊字符显示密码错误,无法登录。经排查,原因在于在使用 js 解决URL传参加号(+)被自动转换成空格导致的问题
修复方案:
1、打开shopwind移动端/common/server.js文件,function getEncryptionString(obj)函数,将代码
/**
* 获取待加密的字符串
* @var bool pssl 业务参数是否参与加密(安全性更高,但也更消耗性能)
*/
function getEncryptionString(obj) {
let string = ''
// 业务参数不参与加密
if (!obj.pssl) {
for (var key in obj) {
if (key != 'params') {
obj[key] = encodeURIComponent(obj[key])
string += key + "=" + character(obj[key]) + "&"
}
}
}
// 业务参数也参与加密,可能还要考虑剔除文件、字节流数据
else {
for (var key in obj) {
obj[key] = encodeURIComponent(obj[key])
string += key + "=" + character(obj[key]) + "&"
}
}
return string ? string.substr(0, string.length - 1) : ''
}
修改为:
/**
* 获取待加密的字符串
* @var bool pssl 业务参数是否参与加密(安全性更高,但也更消耗性能)
* @desc 业务参数参与加密,需要考虑剔除文件、字节流数据
*/
function getEncryptionString(obj) {
let string = ''
for (var key in obj) {
obj[key] = encodeURIComponent(obj[key])
// 业务参数不参与加密
if (!obj.pssl && key == 'params') {
continue
}
string += key + "=" + character(obj[key]) + "&"
}
return string ? string.substr(0, string.length - 1) : ''
}