角色 保存
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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 }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user