菜鸟学习微信登录的代码逻辑总结

1:前端:wx.login()获取code, wx.request()将code传递到后端。

2:前端:写一个请求接口/wxLogin/getSessionId,传递code,后端返回接收成功信息,和一个sessionId,接口请求就写在点击头像那里。

3:后端:接收code,拿到code之后返回前端操作成功,并且通过getSessionId接口返回前端一个参数sessionId,用来标识当前用户的。
用户在点击微信登录的时候,我们可以标识是谁登录微信。

4:后端:拿着appid+secret+code去获取微信登录凭证接口,并且换取一个结果(就是json字符串) session_key(会话密钥:用户解密encryptedData、iv)和openid。并且存入到redis方便下次调用并且,下次前端拿着sessionId就可以先去redis里面找密钥和openid。

5.前端写第二个接口:在用户点击了头像之后弹出对话框一键登录,这是微信方的一个主键去调用微信接口getUserInfo(),接口会给前端返回两个参数:encryptedData()和iv。接下来前端给后端写请求接口/wxLogin/authLogin,给后端传来encryptedData和iv还有之前的sessionId。

6:后端解析encryptedData(微信传递的加密数据,后端解密)和iv(微信传递,解密算法初始向量)和sessionId就能够获到具体微信用户的基本信息。然后就会给前端返回json数据。后端拿着openid去访问数据库是否存在该用户,存在的话就登录不存在就注册。其中有个token,是JWTutils技术生成的,其实就是一个密钥,提供给前端token令牌,用户在下次访问的时候。携带token来访问,就知道用户是否处于登录状态以及是哪个用户。如果是登录状态的话直接获取基本信息就行了。如果还没登录就告诉用户还未登录。这些直接在authLogin接口接写完了。

7.数据库方面的注意点:userDto和wxUserInfo和user表中的字段统一,注意roken是通过userid来对比的,JXTUtils类里面字段名是id.token其实他的值就是userDto

8.这时候经过一键登录之后,用户主页还是不会显示信息的,这时候就要一个接口/wxLogin/userinfo,这时候前端要把之前在/wxLogin/authLogin接口后端传给的token作为参数发送过来,来验证用户的信息,然后就可以展示出来了。后端在接口的方法定义一个boolean 类型的refresh参数,用来刷新存在redis中的token.

9.统一认证登录,就是需要登录得页面就得拦截,不需要认证登录得就放行。比如点击发布就要认证登录,点击用户界面得一键登录也要认证登录等等。这些都认证只需要都用/wxLogin/userinfo这个接口就能实现了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值