login/auth/BaseAuth.js

/**
 * 鉴权模块基类
 * 负责根据用户提供的信息,完成校验过程,并返回对应的登录数据
 */
class BaseAuth {
  /**
   * 静默登录
   * 可以在用户无感知的情况下后台悄悄完成的登录过程
   * @async
   * @param {Object} loginOptions 登录函数调用参数,参见{@link BaseLogin#login}
   * @param {Object} configOptions 登录模块配置参数,参见{@link BaseLogin#config}
   * @return {BaseAuth~LoginRes}
   */
  silentLogin({loginOptions, configOptions}){
    return {
      succeeded: false, //是否成功
      errMsg: '该授权方式未实现静默登录', //详细错误信息,调试用
      toastMsg: '该授权方式未实现静默登录', //(若有)错误信息话术,展示给用户
      userInfo: {}, //(成功时)用户信息
      expireTime: -1, //(成功时)过期时间,绝对毫秒数,-1表示长期有效
      anonymousInfo: null, //(不管成功失败)匿名信息,登录成功前使用的临时标识,成功后继续关联
    }
  }

  /**
   * 进行授权登录之前的准备工作
   * 时序:beforeAuthLogin -> 用户交互,同意授权 -> authLogin
   * @async
   * @param {Object} loginOptions  登录函数调用参数,参见{@link BaseLogin#login}
   * @param {Object} configOptions 登录模块配置参数,参见{@link BaseLogin#config}
   * @return {*} 需要传递给authLogin的数据
   */
  beforeAuthLogin({loginOptions, configOptions}){};

  /**
   * 授权登录
   * 需要用户配合点击授权按钮/输入表单等才能完成的登录过程
   * @async
   * @param {Object} loginOptions 登录函数调用参数,参见{@link BaseLogin#login}
   * @param {Object} configOptions 登录模块配置参数,参见{@link BaseLogin#config}
   * @param {*} [beforeRes] beforeAuthLogin钩子执行结果
   * @param {Object} authData 登录界面交互结果
   * @return {BaseAuth~LoginRes}
   */
  authLogin({loginOptions, configOptions, beforeRes, authData}){
    return {
      succeeded: false, //是否成功
      errMsg: '该授权方式未实现授权登录', //详细错误信息,调试用
      toastMsg: '该授权方式未实现授权登录', //(若有)错误信息话术,展示给用户
      userInfo: {}, //(成功时)用户信息
      expireTime: -1, //(成功时)过期时间,绝对毫秒数,-1表示长期有效
      anonymousInfo: null, //(不管成功失败)匿名信息,登录成功前使用的临时标识,成功后继续关联
    }
  }
}

/**
 * @typedef {Object} BaseAuth~LoginRes 鉴权模块登录结果
 * @property {boolean} succeeded 是否成功
 * @property {string} errMsg 详细错误信息,调试用
 * @property {string} [toastMsg] 错误信息话术,向用户提示用
 * @property {Object} userInfo (成功时)用户信息
 * @property {number} expireTime (成功时)过期时间,绝对毫秒数,-1表示长期有效
 * @property {Object} [anonymousInfo] (不管成功失败)匿名信息,登录成功前使用的临时标识,成功后继续关联
 */

export default BaseAuth;