认证鉴权/会话鉴权
348字约1分钟
2024-11-7
当你要为你的客户提供服务时,在每一轮对话时你都需要进行对客户进行额度扣除或者确认用户是否还有权限进行对话。
需要注意,这个配置函数中最好不要每次都使用 await
来等待业务接口,而是采用缓存方式。下面会给出实践案列。
简单使用
const espAi = require("esp-ai");
const config = {
auth: async ({ client_params, type }) => {
const { ext1, device_id } = client_params;
const api_key = ext1;
const { success: user_success, message: user_message, code: user_code } = await fetch(`xxx`);
if (!user_success) {
// some code...
infoLog.info(`授权失败:[${user_code}] -> ${user_message}`)
return { success: user_success, message: user_message };
}
return { success: true }
},
};
const espAiIns = espAi(config);
使用缓存策略
这个查询要异步进行,也就是第一次进行一次验证,接下来都走缓存,顶多也就让用户都是用几次额度而已。
const espAi = require("esp-ai");
const config = {
auth: async ({ client_params, type }) => {
const { ext1, device_id } = client_params;
const api_key = ext1;
let use_once_interface_res = {};
const cacheData = getCache(ext1, "use_once_interface_pre_res"); // 获取是否可以上一次接口返回的数据
if (!cacheData) {
// 说明是第一次连接,必须要查一次数据库
use_once_interface_res = await fetch(`xxx`);
// 记录缓存
// some code...
} else {
use_once_interface_res = cacheData;
// 查询最新数据缓存,以备下次使用
// some code...
}
const { success: user_success, message: user_message, code: user_code } = use_once_interface_res;
if (!user_success) {
// some code...
infoLog.info(`授权失败:[${user_code}] -> ${user_message}`)
return { success: user_success, message: user_message };
}
return { success: true }
},
};
const espAiIns = espAi(config);