在 javascript 中实现接口请求结果授权策略,核心做法是在 fetch 的响应处理链中拦截状态码或特定字段,并根据业务规则决定是返回数据还是抛出异常。具体而言,需要在 .then() 回调中检查 response.status,若为 401 则触发重定向或刷新逻辑,若为 200 但业务层标记未授权则拒绝 promise,从而确保只有合法数据能流向后续组件。

如何区分 HTTP 状态码与业务层授权错误
通过解析 JSON 响应体中的 code 字段来区分网络级成功与业务级失败。当 fetch 收到 200 时,需进一步检查 data.code 是否为 0,若非 0 则视为授权不足或权限校验失败,此时应主动 reject 该 Promise 以阻断后续流程。

const checkAuth = async (url) => {
const res = await fetch(url);
if (!res.ok) throw new Error('Network error');
const json = await res.json();
if (json.code !== 0) throw new Error('Permission denied');
return json.data;
};
checkAuth('/api/user/profile').then(console.log).catch(console.error);
如何在拦截器中统一处理 Token 过期
利用 Promise 链式调用封装统一的认证检查逻辑。在获取到响应后,若检测到 token_expired 标志,立即执行 refreshToken 方法并重新发起原请求,否则直接返回原始数据,从而实现无感知的授权续期。
立即学习“Java免费学习笔记(深入)”;

const refreshToken = () => fetch('/auth/refresh', { method: 'POST' });
const requestWithAuth = async (url, options) => {
try {
const res = await fetch(url, options);
const json = await res.json();
if (json.token_expired) {
await refreshToken();
return requestWithAuth(url, options);
}
return json;
} catch (e) {
console.error('Auth failed', e);
}
};
requestWithAuth('/api/data').then(console.log);
基于用户角色字段的细粒度访问控制
针对包含 role 字段的响应对象,实施基于角色的访问控制(RBAC)。在中间件层判断当前用户的 role 是否具备访问该接口的权限,若不匹配则直接返回空对象或特定错误码,防止敏感数据泄露给低权限用户。


















