...
 
Commits (2)
    https://gitcode.net/dcloud/uni-im/-/commit/c41d98704ee48e9e428b953d0f12549c26e68c93 3.4.39 2024-11-15T15:33:25+08:00 linju linju@dcloud.io https://gitcode.net/dcloud/uni-im/-/commit/9e8e5170304884034264135faa3142293b9a8b39 3.4.40 2024-11-18T20:32:38+08:00 linju linju@dcloud.io
## 3.4.40(2024-11-18)
uni-im-co 新增 httpApi 方法,方便第三方服务器调用其 url 化后的任意方法
## 3.4.39(2024-11-15)
- 新增 客户端错误日志收集功能
- 修复 由3.4.37更新引起的解散群功能出错的问题
## 3.4.38(2024-11-14)
更新 去掉可选链,兼容 Nodejs12
## 3.4.36(2024-11-12)
......
{
"id": "uni-im",
"displayName": "uni-im",
"version": "3.4.38",
"version": "3.4.40",
"description": "uni-im是云端一体的、全平台的、免费的、开源即时通讯系统",
"keywords": [
"im,即时通讯,客服,聊天"
......@@ -33,6 +33,7 @@
"uni_modules": {
"dependencies": [
"uni-id-pages",
"uni-cloud-s2s",
"uni-search-bar",
"uni-segmented-control",
"Sansnn-uQRCode",
......
const {verifyHttpInfo} = require('uni-cloud-s2s')
module.exports = async function httpApi(modules){
// console.log('this.getClientInfo()',this.getClientInfo())
// 校验是否有权限调用
checkPermission.call(this)
// 获取 HTTP 请求参数
const [param,options] = getHttpParams.call(this)
// 获取模拟操作的用户的信息
const {userInfo,clientInfo} = options
this.current_uid = userInfo._id
// 角色信息
this.current_user_role = userInfo.role || []
// 设置客户端信息,例如设置客户端appid
if (clientInfo){
this.clientInfo = Object.assign(this.getClientInfo(),clientInfo)
}
const funcName = Object.keys(param)[0]
const funcParam = Object.values(param)[0]
// 执行要调用的方法
// console.log('funcName:',funcName)
// console.log('funcParam:',funcParam)
return await modules[funcName].call(this,funcParam)
}
function checkPermission(){
if(this.getClientInfo().source != 'http'){
throw {
errCode: 'permission-denied',
errMsg: '仅限制 HTTP 调用'
}
}
// 校验 HTTP 请求是否合法
verifyHttpInfo(this.getHttpInfo())
}
function getHttpParams(){
// 获取 HTTP 请求相关信息
const httpInfo = this.getHttpInfo();
// 获取请求参数
let params = httpInfo.body
// 尝试地将参数转换为 JSON 对象
try {
params = JSON.parse(params)
} catch (_) {}
if (!Array.isArray(params) || (params.length != 2) || !params.every(item => Object.prototype.toString.call(item) === '[object Object]')) {
throw {
errCode: 'params-error',
errMsg: '参数错误:必须是长度为2的数组,且每一项都是对象,如:[{"方法名":"参数"},{"userInfo":{"_id":"执行操作的用户id"},"clientInfo":{"appid":"模拟的客户端appid"}}]'
}
}
return params
}
\ No newline at end of file
const httpApi = require('./httpApi.js')
const conversation = require('./conversation.js')
const msg = require('./msg.js')
const push = require('./push.js')
......@@ -5,6 +6,15 @@ const friend = require('./friend.js')
const group = require('./group.js')
const filtered_conversation = require('./filtered-conversation.js')
const tools = require('./tools.js')
const modules = Object.assign(
conversation,
msg,
push,
friend,
group,
filtered_conversation,
tools
)
module.exports = {
async _before() {
......@@ -25,7 +35,7 @@ module.exports = {
})
// 除非特定方法允许未登录用户调用,其它都需要验证用户的身份
const allowedMethodsWithouLogin = []
const allowedMethodsWithouLogin = ["httpApi"]
if (!allowedMethodsWithouLogin.includes(this.getMethodName())) {
if (this.getClientInfo().source == 'function') {
// 云函数互调时,免校验 token 直接使用传来的用户 id
......@@ -100,12 +110,8 @@ module.exports = {
return result || { errCode: 0 }
},
...conversation,
...msg,
...push,
...friend,
...group,
...filtered_conversation,
...tools,
...modules,
httpApi(){
return httpApi.call(this,modules)
}
}
{
"name": "uni-im-co",
"dependencies": {
"uni-cloud-s2s": "file:../../../../uni-cloud-s2s/uniCloud/cloudfunctions/common/uni-cloud-s2s",
"uni-config-center": "file:../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center",
"uni-id-common": "file:../../../../uni-id-common/uniCloud/cloudfunctions/common/uni-id-common",
"uni-im-ext": "file:../common/uni-im-ext",
......