JoeX
JoeX
  • 发布:2024-02-01 23:19
  • 更新:2024-02-02 12:56
  • 阅读:606

【报Bug】JQL 添加数据报错,未能获取当前用户信息:当前用户为匿名身份(已解决)

分类:uniCloud

产品分类: uniCloud/App

操作步骤:

JQL保存数据

预期结果:

保存数据成功

实际结果:

报错:未能获取当前用户信息:当前用户为匿名身份

bug描述:

JQL保存数据报错
Error: 未能获取当前用户信息:当前用户为匿名身份

Schema File如下:

{
"bsonType": "object",
"required": [],
"permission": {
"read": true,
"create": true,
"update": true,
"delete": true
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"user_one": {
"description": "创建人ID,空间创建人ID",
"foreignKey": "uni-id-users._id",
"forceDefaultValue": {
"$env": "uid"
}
},
"reserved_1":{
"description": "预留字段",
"bsonType": "int"
}
}
}

云函数代码:

const dbJQL = uniCloud.databaseForJQL({e,c}).collection("zone")
return await dbJQL.add({reserved_1:0})

说明:用户已经登录,可以正常拿到token,也可以从token中解析到UID

2024-02-01 23:19 负责人:无 分享
已邀请:

最佳回复

DCloud_uniCloud_VK

DCloud_uniCloud_VK

uniCloud.databaseForJQL 这个API是需要传参数的,

云函数写法

exports.main = async (event, context) => {  
    const dbJQL = uniCloud.databaseForJQL({ // 获取JQL database引用,此处需要传入云函数的event和context,必传  
        event,  
        context  
    })  
};

云对象写法

const dbJQL = uniCloud.databaseForJQL({ // 获取JQL database引用,此处需要传入云对象的clientInfo  
  clientInfo: this.getClientInfo()  
})

直接指定用户角色权限写法

dbJQL.setUser({ // 指定后续执行操作的用户信息,此虚拟用户将同时拥有传入的uid、role、permission  
        uid: 'user-id', // 用户id  
        role: ['admin'], // 指定当前执行用户的角色为admin。如果只希望指定为admin身份,可以删除uid和permission字段  
        permission: [] // 用户权限  
    })
  • JoeX (作者)

    传参了,是指没有写贴那么全的代码上来,e和c就是传的参数

    2024-02-02 11:50

  • JoeX (作者)

    e和c里面都有token

    2024-02-02 11:52

  • DCloud_uniCloud_VK

    回复 x***@sina.cn: 可能token过期了, 重新登录下

    2024-02-02 11:52

  • JoeX (作者)

    回复 DCloud_uniCloud_VK: token没有过期,能取出uid

    2024-02-02 11:53

  • DCloud_uniCloud_VK

    回复 x***@sina.cn: 你把token私发我下

    2024-02-02 12:00

  • DCloud_uniCloud_VK

    回复 JoeX: 你的token没问题,那就是初始化JQL的时候参数没传对

    2024-02-02 12:10

  • JoeX (作者)

    回复 DCloud_uniCloud_VK:


    'use strict';

    let uid = ""

    var {tokenChecking} = require("token-checking")

    const db = uniCloud.database()

    const zoneDB = db.collection("zone")

    const dbCmd = db.command


    exports.main = async (event, context) => {

    //event为客户端上传的参数

    console.log('Zone event : ', event)


    const checkToken = await tokenChecking(event,context)  
    if(checkToken.errCode != 0){
    return checkToken
    } else {
    if(checkToken.data && checkToken.data.uid){
    uid = checkToken.data.uid
    }
    }

    switch(event.action){
    case "createZone": {
    return createZone(event, context)
    }
    case "queryZoneByUserId": {
    return queryZoneByUserId(event, context)
    }
    case "queryZoneByZoneId": {
    return queryZoneByZoneId(event, context)
    }

    default:{
    return {
    errCode: "-1",
    errMsg: "无效Acation"
    }
    }
    }

    };


    async function createZone(e, c) {

    const zoneResult = await queryZoneByUserId(e,c)

    console.log("zoneResult",zoneResult)

    const dbJQL = uniCloud.databaseForJQL({e,c}).collection("zone")

    return await dbJQL.add({reserved_1:0})

    }


    async function queryZoneByUserId(e, c) {

    const zoneResult = await zoneDB.where(dbCmd.or({

    user_id_1: uid

    },{

    user_id_2: uid

    })).get()


    console.log("zoneResult",zoneResult)  
    return zoneResult

    }

    2024-02-02 12:16

  • JoeX (作者)

    createZone 这个函数应该没错吧

    2024-02-02 12:16

  • JoeX (作者)

    回复 JoeX: 函数最前面的check token都能拿到uid

    2024-02-02 12:17

JoeX

JoeX (作者)

请官方大佬帮忙解决,卡了很久了

JoeX

JoeX (作者)

补充云函数请求

JoeX

JoeX (作者)

顶一下吧

JoeX

JoeX (作者)

@DCloud_uniCloud_VK
VK大佬,这是debug截图,,麻烦再帮忙看看

JoeX

JoeX (作者)

找到问题了。初始化jql写错了。关贴了

要回复问题请先登录注册