角色 保存

This commit is contained in:
zhonghua1
2026-01-02 14:40:14 +08:00
parent f004a75483
commit b607a5980c
5 changed files with 185 additions and 86 deletions

View File

@@ -44,13 +44,14 @@ function isLoginApi(url) {
}
/**
* 设置全局 uni.request 拦截器,自动添加 X-Tenant-Id header
* 设置全局 uni.request 拦截器,自动添加 X-Tenant-Id header 和 Authorization token
* 确保每次请求后端都携带 token 进行身份验证
*/
function setupRequestInterceptor() {
// 保存原始的 uni.request
const originalRequest = uni.request
// 重写 uni.request自动添加 tenantId
// 重写 uni.request自动添加 tenantId 和 token
uni.request = function(options = {}) {
const { url, header = {}, method = 'GET', ...restOptions } = options
@@ -81,18 +82,37 @@ function setupRequestInterceptor() {
newHeader['X-Tenant-Id'] = tenantId
}
// 添加 token如果存在且未设置
if (!newHeader['Authorization']) {
// 每次请求都自动添加 token登录接口除外
// 全局拦截器确保所有通过 uni.request 的请求都携带 token
if (!isLoginApi(url)) {
try {
const token = uni.getStorageSync('backend-token') || ''
if (token) {
// 每次请求都添加 token 到 Authorization header
newHeader['Authorization'] = `Bearer ${token}`
} else {
// 如果没有 token移除可能存在的旧 Authorization header
delete newHeader['Authorization']
}
} catch (e) {
console.error('获取 token 失败:', e)
}
}
// 添加 roleName 和 scenario 到 header从登录响应中获取
try {
const roleName = uni.getStorageSync('backend-role-name') || ''
if (roleName) {
newHeader['X-Role-Name'] = roleName
}
const scenario = uni.getStorageSync('backend-scenario') || ''
if (scenario) {
newHeader['X-Scenario'] = scenario
}
} catch (e) {
console.error('获取 roleName 或 scenario 失败:', e)
}
// 统一使用 Promise 方式,确保正确返回响应
// 这样无论调用方使用 await 还是回调,都能正常工作
return new Promise((resolve, reject) => {
@@ -132,7 +152,7 @@ function setupRequestInterceptor() {
})
}
// 全局请求拦截器已设置,所有 uni.request 调用将自动添加 X-Tenant-Id header
// 全局请求拦截器已设置,所有 uni.request 调用将自动添加 X-Tenant-Id header 和 Authorization token
}
export default async function() {

View File

@@ -61,6 +61,30 @@ function getToken() {
}
}
/**
* 获取 roleName从本地存储
*/
function getRoleName() {
try {
return uni.getStorageSync('backend-role-name') || ''
} catch (e) {
console.error('获取 roleName 失败:', e)
return ''
}
}
/**
* 获取 scenario从本地存储
*/
function getScenario() {
try {
return uni.getStorageSync('backend-scenario') || ''
} catch (e) {
console.error('获取 scenario 失败:', e)
return ''
}
}
/**
* 统一的请求方法
* @param {Object} options - uni.request 的配置选项
@@ -99,16 +123,29 @@ export function request(options = {}) {
...header
}
// 添加 token如果需要
if (needToken) {
// 每次请求都自动添加 token登录接口除外
// 确保所有后端请求都携带 token 进行身份验证
if (needToken && !isLoginApi(fullUrl)) {
const token = getToken()
if (token) {
// 每次请求都添加 token 到 Authorization header
requestHeader['Authorization'] = `Bearer ${token}`
// 或者使用其他 header 名称,根据后端要求调整
// requestHeader['X-Token'] = token
} else {
// 如果没有 token移除可能存在的旧 Authorization header
delete requestHeader['Authorization']
}
}
// 添加 roleName 和 scenario 到 header从登录响应中获取
const roleName = getRoleName()
if (roleName) {
requestHeader['X-Role-Name'] = roleName
}
const scenario = getScenario()
if (scenario) {
requestHeader['X-Scenario'] = scenario
}
// 处理请求数据
let requestData = { ...data }