1.前端调用wx.login()获取code值
2.前端通过调用wx.getUserInfo获取iv、rawData、signature、encryptedData等加密数据,传递给后端
3.服务器通过code请求api–auth.code2Session,换回session_key和openid
示例代码
(判断用户的openid是否在数据库中不在就加入成为会员,再给前端发送token(随机字符,也可以用时间戳+openid) )
4前端得到token,保存到缓存sto,
5前端发送消息到服务器时带上token,
6服务器验证token(如果token用时间戳,跟新时间戳,)
注:
1.Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,
2.Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
3. 前端调用 wx.checkSession 接口检测当前用户登录态是否有效。(用户有可能退出小程序)
登录态过期后开发者可以再调用 wx.login 获取新的用户登录态。调用成功说明当前 session_key 未过期,调用失败说明 session_key 已过期
//开发者应在后端服务器使用getAccessToken
获取 access_token(2小时有效)
//两种授权机制
第一种:每次拿授权信息前,都去login拿最新的code找后端获取数据 –token(后端自己维护)。
第二种:授权时先调用checkSession判断session_key是否失效( ),失效重新调用wx.login。没失效只给后端iv和data去获取数据,后端照样返回你数据~
session_key 是有时效性的,它的时效性就是通过 checkSession 来检查的。因此如果 checkSession 说登录失效了,那么通常你就需要重新进行微信授权,更新 session_key
4.服务器通过前端给的rawData 加获取的session_key使用sha1加密,计算出signature1
5.比对前端传的signature和自己算出来的signature1是否一致(防止数据不一致)
6.用AES算法解密encryptedData里的敏感数据
7.拿着敏感数据后做自己的逻辑
8.通知前端登陆成功
一、通过基础接口token获取用户信息
1、获取token
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
2、获取个人信息(如果不关注公众号,返回“未关注”状态,拉取不到更多信息)
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
二、通过社交接口token获取用户信息(不需要关注公众号)
1、获取CODE
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
参数scope 默认有2个值snsapi_base(只获取openid)和snsapi_userinfo(可获取更多用户信息、头像、昵称等,需要用户在网页授权)
2、获取token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
3、获取用户信息
https://api.weixin.qq.com/sns/userinfo?access_token=TOKEN&openid=OPENID&lang=zh_CN