朗歌前端基座sdk
sdk初始化
在主应用中会初始化sdk,挂载在window中,微应用可通过window.avanger判断是否已经初始化sdk
在微应用中调用
avangerSdk.init({
appId: 1, // 应用ID,默认 0
loginHost: SSO_URL, // SSO登录域名
authHost: AUTH_URL, // 权限平台域名
})
可在本地开发时不报错,并调用部分sdk可用功能,包裹登录,登出等
版本
- v1.2.0
- v1.3.0 更新:修复获取页面权限获取错误问题
- v1.4.0 新增:接入权限平台,新增获取权限,用户信息功能
- v1.4.1 更新:支持自定义本地存储前缀
- v1.4.2 修复:解决登出token问题
- v1.4.6 更新:登录失败新增Toast提示错误信息
- v1.4.7 fix: 处理版本号不一致问题
功能概括
1. 引入SDK
// 安装依赖
npm install @langge-data/avanger-sdk --save
// 文件引入
import avangerSdk from '@langge-data/avanger-sdk';
2. 初始化
// app.js 文件入口处初始化
avangerSdk.init({
appId: 1, // 应用ID,默认 0
loginHost: SSO_URL, // SSO登录域名
authHost: AUTH_URL, // 权限平台域名
refreshTokenName: 'refresh' // 自定义Token名称, 不配置默认为 refresh,
authTreeType: 'array', // 权限树返回格式 array | object, 不配置默认为 array
})
appId: 用以区分不同平台, 取值: 0: 不获取权限 999: 获取所有平台权限 1: 获取onemap生管平台权限 2:获取HD管理后台权限
3. 获取权限、用户信息
avangerSdk.getAuthInfo()
.then(({ code, msg, data }) => {
if (code === 0) {
// 获取全部权限
// 方式1 const auth = avangerSdk.getRole()
// 方式2 const auth = data.permission_entities
// 获取用户信息
// 方式1 const userInfo = avangerSdk.getUserInfo()
// 方式2 const userInfo = data.user_info
// todo: 业务代码
} else {
// todo: 获取权限信息失败提示 msg
}
})
.catch(() => {
// todo: 获取权限信息失败提示
})
接口返回数据格式: https://www.yuque.com/docs/share/c162cf85-df2a-48e0-abda-20217f2ba61b?#zjw8z
4. 添加 refresh-token 请求头
// 在请求拦截器中
http.interceptors.request.use(
(config) => {
const token = avangerSdk.getToken()
if (token) {
config.headers['refresh-token'] = token
}
...
return config
}
)
5. 修改无权访问和登录过期逻辑
接口返回code码: 401,403: token有效,但相应接口无权限访问 406: token失效,登录过期 接口无权限或登录过期时,http 响应状态码 status 会为401/403/406, 同时返回 response.data.code 为相应code码
权限平台文档:https://www.yuque.com/docs/share/c162cf85-df2a-48e0-abda-20217f2ba61b?#zjw8z
http.interceptors.response.use(
(response) => {
const { code } = response.data
if (code === 0) {
return response
} else if (code === 401 || code === 403 {
// todo: 无权访问提示
} else if (code === 406) {
// todo: 登录过期提示 + 登出跳转
console.log('登录过期, 请退出重新登录')
avangerSdk.logout()
} else {
// todo: 其他业务提示
}
return Promise.reject(res)
},
(error) => {
const { status } = error.response
if (status === 401 || status === 403 {
// todo: 无权访问提示
} else if (status === 406) {
// todo: 登录过期提示 + 登出跳转
console.log('登录过期, 请退出重新登录')
avangerSdk.logout()
} else {
// todo: 其他业务提示
}
return Promise.reject(err)
}
)
相关API
获取权限
// 获取全部权限
avangerSdk.getRole()
// 获取路由权限
avangerSdk.getRole('route')
// 获取页面按钮权限
avangerSdk.getRole('page')
// 设置页面内按钮权限, code: 页面code
avangerSdk.setPagePermission(code)
// 获取用户信息
avangerSdk.getUserInfo()
获取 Token
// 获取 refresh-token, 参数默认为 config.refreshTokenName 即 ‘refresh’
avangerSdk.getToken() 或 avangerSdk.getToken('refresh')
// 获取 sso-token (正常情况下,不需要再获取ssoToken)
avangerSdk.getToken('sso')
登录登出跳转
// 登录
avangerSdk.login()
// 登出
avangerSdk.logout()