20190403 syllabus-backend学习

2019-04-03  本文已影响0人  瑶九九

流程图

image.png

syllabus-backend后台框架实现了上述画圈的内容

查询认证配置并返回

controller.user.oauth.getOauthData来实现
由于返回给web端和app端的认证配置内容不同,所以需要先判断请求来源from(默认请求来源为web)
from作为参数传递给service.user.oauth.generateOauthData(from)方法,该方法根据请求来源的不同,生成并返回不同的认证配置
其中若请求来源为iOS、android、mini,则返回state(将被存储在session中,用于oauth重定向到后台时的state校对),client_id,redirect_uri(业务后台的uri),oauth_url,scope

code换取token

使用redirect_url,传入code和state,调用controller.user.oauth.stuLogin,流程如下:

  1. 检验state的合法性
    判断传入的state和之前存在session中的state是否一致
  2. code换取accessToken
    构建data,固定grant_type为'authorization_code',确定为授权码模式登录,根据不同的appType生成不同的data
let data = {
           grant_type: 'authorization_code',
           code: code,
           client_id: config.stu_oauth[appType].client_id,
           client_secret: config.stu_oauth[appType].client_secret
       }

向oauth后台发送post请求,传递data,如果请求成功则更新STU token,返回res.data

  1. 生成课程表登录凭证
    根据分别设定的skey、refreshKey过期时间,生成新的skeyExpiresAt,refreshKeyExpiresAt,将skey,refreshKey,skeyKeyExpiresAt,refreshKeyExpiresAt组装到loginKeys中,将新数据增加到对应的数据库中,返回登录凭证

用refreshKey刷新登录凭证并更新信息

refreshLoginState方法用refresh_key来刷新课程表登录凭证,并更新用户信息

刷新凭证

首先查询refresh_key所在的密钥表,获取密钥,检查密钥是否存在,判断登录态是否有效
若refresh_key过期则抛出错误,如果没有过期就重新生成课程表登录凭证

更新用户信息

调用service.user.oauth.getStuToken(user_id)
用user_id在数据库中查询对应的token,判断是否有效,由于需要预留给服务器计算和通信的时间,所以规定过期时间前60s为有效
如果token有效,则返回token,设置is_refresh:false
如果token不存在或过期,则请求刷新token,设置grant_type为refresh_token,返回刷新后的token,并设置is_refresh:true
判断!is_refresh,当token有效,不用刷新时,需要同步并保存用户信息

返回用户信息

调用service.user.user.filtrateUserInfo()方法,过滤用户信息,仅返回id,nickName以及avatarUrl

上一篇下一篇

猜你喜欢

热点阅读