根据网页地址中的特定值换取登录令牌

xmf de008ada57 ci: 修改publish-> publish:npm 2 years ago
src ae64236525 fix(getQueryString): 修复待获取参数直接连着#时, 添加getQueryString的方法测试 2 years ago
.gitignore 1cb0dcf8bf config: 修改项目gitignore 3 years ago
.npmignore 7cdc4fe1ff refactor: webpack更换为ts+rollup的形式 2 years ago
LICENSE 08065a896b add LICENSE. 3 years ago
README.md 2c662416bf create library 3 years ago
jest.config.js ae64236525 fix(getQueryString): 修复待获取参数直接连着#时, 添加getQueryString的方法测试 2 years ago
package.json de008ada57 ci: 修改publish-> publish:npm 2 years ago
pnpm-lock.yaml 8cae7b358a fix: 修复打包错误 2 years ago
rollup.config.ts 17fdd940f0 polish: 获取到登陆信息时抛出错误 2 years ago
tsconfig.json 7cdc4fe1ff refactor: webpack更换为ts+rollup的形式 2 years ago
yarn.lock ae64236525 fix(getQueryString): 修复待获取参数直接连着#时, 添加getQueryString的方法测试 2 years ago

README.md

// 本地需要编写
// api接口通过code换取token
async function getTokenByCode(code){
 // 发送接口获取token 并返回
  const res = await  request({ method:'get', url:'xxx', params:{code} })
  return res.data // 取出返回数据中的token或者返回一个包含token数据的对象
}
function persistingData (data) {
  localStorage.setItem('token',data.token)
    // do something
}
async function render(){
  try{
    const res = await loginByQueryInfo({signKey:'code',getTokenByCode,persistingData})
  }catch(e){
    //do something
  }
  // do something
}
// npm库 获取token 删除code
export async function loginByQuery({ signKey = 'code', getTokenBySign, persistingData}={},url){
   if(typeof getTokenBySign !=='function' || typeof persistingData !== 'function'){
       throw new Error('getTokenByCode、persistingData必须为函数')
     }
   const sign = getQueryString(signKey,url)
   if(!isEmpty(sign)){
      const res = await getTokenBySign(sign)
      await persistingData(res)
      if(!url) replaceSign(signKey)
   }else{
     throw new Error('无法获取到sign')
   }
}
// 获取url的query中指定key的值
export function getQueryString(key, url){
  if(isEmpty(url)) url = window.location.href
  const reg = new RegExp('(^|&|\\?)' + key + '=([^&]*)(&|$|#)', 'i')
  const r = url.match(reg)
  if (r != null) return decodeURIComponent(r[2])
  return null
}
// 重定向页面去除指定的key
function replaceSign(signKey) {
  const reg = new RegExp('(^|&|\\?)'+ signKey +'([^&]*)(&|$|#)','i')
  const url = window.location.href.replace(reg, '')
  window.history.replaceState(null, null, url)
}
// 判断变量是否为空
function isEmpty(val){
  return val === undefined || val === null
}