问题
在做微信小程序时,需要使用 Authorization
进行授权,结果每次登录的时候都出现这个弹窗。对 Authorization
不熟悉的,可以阅读 阮一峰-理解OAuth 2.0 。
原因
部分代码如下,按说使用了 Authorization
授权时,会将用户名和密码用 base64 进行编码然后放到 header 中传入后端代码,就像这里的 'Authorization': 'Basic V0VDSEFUOldFQ0hBVAo='
,在服务端也会有固定的用户名密码,与之比较,相同则身份通过,否则不通过才会出现上述这种弹窗。
wx.request({
// .....
data: {
grant_type: 'password',
username: user.username,
password: user.password
},
header: {
'Authorization': 'Basic V0VDSEFUOldFQ0hBVAo=',
'Content-Type': 'application/x-www-form-urlencoded'
},
success: function (res) {
// ....
}
});
这里的 V0VDSEFUOldFQ0hBVAo=
用 base64 解码之后确实是 WECHAT:WECHAT
,格式为:用户名:密码
,也就是用户名是 WECHAT
,密码也是 WECHAT
。截图如下,乍看好像是解码为 WECHAT:WECHAT
,但事实并不是这样的。
在上面文本框中输入 WECHAT:WECHAT
,点击编码按钮得到 V0VDSEFUOldFQ0hBVA==
,可以看到与先前的 V0VDSEFUOldFQ0hBVAo=
并不一样。无疑下面这种直接对 WECHAT:WECHAT
进行编码得到的结果肯定是正确的,那上面那种是怎么出来的呢??可以试试在上面对话框输入 WECHAT:WECHAT
并且按一下 Enter
键进行换行,再点击编码就得到了之前的那种编码值。
可见:使用正确的编码之后,因为用户名和密码都正确,所以就不会再出现那种要求验证身份的对话框了。
解决
使用 base64 进行编码时,要注意不要多加了换行或者空格,得到的结果都是不一样的。
出现验证身份对话框的情景总结如下:
- 用户名和密码错误;
- 用户名和密码正确,但是使用 base64 编码错误,常见情形:多加了换行符或者空格符。