微信小程序> 微信小程序授权登录,微信小程序授权登录

微信小程序授权登录,微信小程序授权登录

浏览量:1064 时间: 来源:Orcas阿晨
登录流程时序说明:
调用wx.login()获取临时登录凭证code,并回传到开发者服务器。调用auth.code2Session接口,换取用户唯一标识OpenID和会话密钥session_key。之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。注意:
会话密钥session_key是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。
临时登录凭证code只能使用一次。
具体实现1、获取登录凭证code
login(){wx.login({success(res){if(res.code){//发起网络请求wx.request({url:'http://127.0.0.1:18080/wx/login',method:'POST',header:{'content-type':'application/x-www-form-urlencoded'},data:{code:res.code},success(res){if(res.data.status==200){letticket=res.data.ticket;//保存自定义登录态至客户端wx.setStorage({key:'LOGIN',data:ticket})}else{//登录失败wx.removeStorage({key:'LOGIN'})}}})}else{console.log('登录失败!'+res.errMsg)}}})}2、调用auth.code2Session接口校验登录凭证
GEThttps://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code填入对应的小程序ID、密钥、和刚刚获得的凭证code,得到响应:
{"session_key":"5tF5KuDigyB6e4m7FigHvw==","openid":"orWy35UBNFZyReiUYVZvtPrqht-0"}该信息不能直接存储至客户端,需在服务端做保存(这里选择存储至redis中)。
@RestController@RequestMapping("/wx")publicclassWeixinController{@AutowiredprivateRestTemplaterestTemplate;@AutowiredprivateRedisTemplateString,StringredisTemplate;publicstaticfinalStringAPPID="your_appid";publicstaticfinalStringSECRET="your_secret_key";@PostMapping("/login")publicMapString,ObjectwxLogin(@RequestParam("code")Stringcode){MapString,Objectresult=newHashMap();result.put("status",200);Stringurl="https://api.weixin.qq.com/sns/jscode2session?appid="+APPID+"&secret="+SECRET+"&js_code="+code+"&grant_type=authorization_code";StringjsonResult=restTemplate.getForObject(url,String.class);if(StringUtils.contains(jsonResult,"errcode")){//登陆凭证校验错误codebeenusedresult.put("status",5000);result.put("msg","登陆失败");returnresult;}//校验通过//Stringmd5Key=DigestUtils.md5Hex(jsonResult+"HAOKE_WX_LOGIN");StringredisKey="WX_LOGIN_"+md5Key;redisTemplate.opsForValue().set(redisKey,jsonResult,Duration.ofDays(7));result.put("ticket","HAOKE_"+md5Key);returnresult;}}
错误响应:code只能被使用一次
{"errcode":40163,"errmsg":"codebeenused,hints:[req_id:tCpcZfyFe-myWCca]"}3、保存自定义登录态至客户端通过wx.setStorage,具体代码在前面贴了。4、校验是否登录
checkSession(){const_this=this;wx.checkSession({success(){wx.showToast({title:'已登录',icon:'success',duration:2000})},fail(){wx.showToast({title:'登录失效',icon:'none',duration:2000})_this.login()//重新登录}})},6、发起业务请求时,携带客户端中的自定义登录态,去redis查询到对应的session_key和openid。

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎