赞
踩
最近在开发微信小程序出了问题,除了使用微信登录外,还做了一个绑定后台账号的功能,先使用wx.login获得code给后端返回openid,而后拿openid做后台账号绑定,相当于是账号密码登录,但是上线后发现一种现象就是:ios、微信开发者调试工具、电脑端都没有问题,只有Android端(真机调试也只是Android端)在登录完成之后立马退出,发现调用其他接口依然是未登录状态,偶尔会好的,针对此问题,我们一步步做断点打印查原因。
1. 问题分析:
登录成功之后,访问其他接口的时候返回依然没有登录成功,那么可能是以下情况:
2. 发现原因:
提出两点猜测,开始分别求证
这是正常登录而且能成功发送请求的phpid信息
PHPSESSID=qgmf7g45h5h1alt.....(省略后面部分)
这是正常登录但不能成功发送请求的phpid信息
SameSite=Lax,PHPSESSID=qgmf7g45h5h1alt.....(省略后面部分)
通过对比发现在使用Android手机时,后端Response Header中的cookie不但顺序是不一样的,而且请求失败的时候PHPSESSID前面被拼接了一段“SameSite=Lax,”导致后端识别请求PHPSESSID失败。我也不明白为什么只有安卓机会这样,希望有懂得大佬能告知。
3. 解决方案:
通过对比发现改动前端的方案性价比最高,于是我们在前端添加了这样的一段代码。
因为发送请求需要在请求头header里携带cookie信息,通常的处理办法是登录成功后返回的PHPSESSID通过setStorage存储到本地以便在配置request请求时获取PHPSESSID放在请求头。我们可以在登录成功后端返回response信息里处理一下response.header[‘Set-Cookie’]里的信息。
if (response && response.header && response.header['Set-Cookie']) {
let cookie = response.header['Set-Cookie']
cookie.replace('SameSite=Lax,', '')
wx.setStorageSync('cookieKey', cookie); //保存Cookie到Storage
}
至此,问题解决。微信小程序开发会遇到千千万万个坑,有时候解决问题不难,难在发现问题,希望可以给遇到同样问题的人一点思路。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。