01. pigx微信小程序登录流程
pigx配置小程序信息
访问pigx配置小程序信息,在这个页面中我们配置了pigx小程序的appId
和appSecret
。
然后根据文档的说明,会经历以下几个步骤
- 小程序端
wx.login
返回 code 调用 pigx 获取 token。 - 若 pigx 返回
200 & access_token
,小程序端保存access_token
,调用服务端API使用 - 若 pigx 返回
401
则未绑定,跳转绑定功能- 使用短信验证码模式登录获取 token
- 小程序端再次
wx.login
获取 code - 调用绑定接口,实现用户&&openid 绑定
pigx流程一览
根据上面的步骤,一共有四个接口会进行调用
- 小程序端调用
wx.login
返回 code,调用http://pigx.com/auth/mobile/token/social?grant_type=mobile&mobile=MINI@{微信返回的code}
获取 token - 如果手机号和 openid 进行过绑定,则可以正常获取到 token,然后用户就能用token来做后续的事情了。如果手机号和 openid 没有绑定过,则调用
http://pigx.com/admin/mobile/{手机号码}
获取短信验证码 - 根据短信验证码,调用
http://pigx.com/auth/mobile/token/sms?mobile=SMS@{手机号码}&code={短信验证码}&grant_type=mobile
,获取token - 使用获取的token,调用
http://pigx.com/admin/social/bind?state=MINI&code={微信返回的code}
,将token与code进行绑定
/mobile/token/social 流程
首先,因为url是以/auth
开头,所以该请求会被网关pigx-gateway
模块发送到pigx-auth
模块
然后该请求会被com.pig4cloud.pigx.common.security.mobile.MobileAuthenticationFilter
拦截,因为这个过滤器监听了/mobile/token/*
,这个过滤器取出了MINI@{微信返回的code}
,并将这个塞入到MobileAuthenticationToken
里面,然后交给认证管理器去进行认证
不知道它怎么运行的,它来到了com.pig4cloud.pigx.common.security.mobile.MobileAuthenticationProvider#authenticate
,在这个方法里面,它没有办法直接处理MINI@{微信返回的code}
,所以它将这个发送给upms
模块,交给该模块的/social/info/{inStr}
进行处理
upms
模块的com.pig4cloud.pigx.admin.controller.SysSocialDetailsController#getUserInfo
方法里面,将MINI@{微信返回的code}
这个串拆分成MINI
和{微信返回的code}
这两部分,然后用com.pig4cloud.pigx.admin.handler.AbstractLoginHandler#handle
来进行处理
AbstractLoginHandler#handle
方法,会从数据库中将小程序中的app_id
和app_secret
取出来,然后结合{微信返回的code}
,调用微信的jscode2session
获取 openid,使用这个 openid 去用户表里面搜索用户信息
如果查询到用户信息,则将这个用户信息返回回com.pig4cloud.pigx.common.security.mobile.MobileAuthenticationProvider#authenticate
,然后返回正确的token
如果查询不到则给小程序返回401未认证
/mobile/{手机号码} 流程
上一步如果用户没有绑定过 openid,则小程序需要将手机号码发送给应用
这个url是以/admin
开头的,所以这个请求会被发送到pigx-upms
模块
在这个模块的com.pig4cloud.pigx.admin.controller.MobileController#sendSmsCode
方法里面,pigx会将短信验证码
发送给小程序,小程序打开控制台,能够看到相应的短信验证码
信息
这个短信验证码
同时被记录到了redis里面,以便后续进行校验
因为pigx暂时是测试版本的,所以它没有发送短信。实际生产环境是不能把短信验证码
返回给小程序,而应该将短信验证码
通过短信的方式发送给用户
/mobile/token/sms 流程
得到短信验证码
之后,小程序端请求该接口,将手机号码和openid进行绑定
因为请求的是以/auth
开头的,所以这个请求会被发送到pigx-auth
模块
与/mobile/token/social
相似,这个请求也会被MobileAuthenticationFilter
拦截,然后进入到com.pig4cloud.pigx.common.security.mobile.MobileAuthenticationProvider#authenticate
在MobileAuthenticationProvider
里面,验证码也会通过feign发送到pigx-upms
模块里面,然后验证
手机验证码是否正确,正确的话返回token给小程序
/social/bind 流程
前面已经获取到token了,然后调用pigx-upms
模块里面的com.pig4cloud.pigx.admin.controller.SysSocialDetailsController#bindSocial
方法
在这个方法里面,首先会调用identify验证微信返回的code
是否正确,如果正确的话能够获取到openid,然后将这个openid写入到已登录用户的账号里面
至此完成小程序绑定功能
以后小程序端再进行登录的时候,因为openid已经绑定过了,所以可以通过openid查出这个用户,将用户信息对应的token返回给小程序
请发表评论