美文网首页
20190403 syllabus-backend学习

20190403 syllabus-backend学习

作者: 瑶九九 | 来源:发表于2019-04-03 11:07 被阅读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

    相关文章

      网友评论

          本文标题:20190403 syllabus-backend学习

          本文链接:https://www.haomeiwen.com/subject/dgsabqtx.html