UniCloud实战留言板功能遇到的“未能获取当前用户信息:当前用户为匿名身份”问题及解决方法 您所在的位置:网站首页 未能获取token UniCloud实战留言板功能遇到的“未能获取当前用户信息:当前用户为匿名身份”问题及解决方法

UniCloud实战留言板功能遇到的“未能获取当前用户信息:当前用户为匿名身份”问题及解决方法

2023-05-13 12:50| 来源: 网络整理| 查看: 265

跟着下面链接的教程做留言板功能 https://www.bilibili.com/video/BV17p4y1a71x/?p=20&vd_source=3db6d6011850c9ac1e496b824b883bee

问题:

匿名状态(未登录时)访问留言板时,会触发下面错误提示 “TOKEN_INVALID_ANONYMOUS_USER 未能获取当前用户信息:当前用户为匿名身份” 并且界面会跳转到登录界面,而不是正常浏览留言板

原因: 未登录状态下访问$cloudEnv_uid引起的

解决方法:在onLoad()中获取缓存中(getStorageSync部分)的登录信息, 如果获取不到则说明未正常登录,未正常登录情况下只确定审核过的留言可显示,不判断是否显示登录者发表的未审核留言 正常登录情况下则两个条件都判断 当然了解决方法应该有很多种,希望高人不吝赐教,uni-app小白先谢谢了!

视频教程里的能正常也许是因为较老版本的uni-starter可以正常吧!

guestbook.vue 源码如下 源码还解决了没有添加头像读取不到avatar_file.url出错的问题 添加了审核过的留言取消审核功能

{{error.message}}{{item.user_id[0].nickname}}{{item.text}}{{!item.state?'审核中':'审核通过'}} {{item.state?'取消审核':'审核中'}} 发送 export default { data() { return { text:"", ifLogin: false, } }, onLoad() { let hostUserInfo = uni.getStorageSync('uni-id-pages-userInfo')||{} this.ifLogin = Object.keys(hostUserInfo).length != 0; console.log('guestbook ifLogin = ',Object.keys(hostUserInfo).length != 0); console.log('guestbook this.uniIDHasRole(AUDITOR) =',this.uniIDHasRole('AUDITOR')) // #ifdef APP-PLUS this.version = plus.runtime.version // #endif }, computed: { where(){ if( this.uniIDHasRole('AUDITOR')){ return '' }else{ //这里需要添加匿名用户可访问代码 暂未找到相应实现代码 /* 问题:匿名状态(未登录时)访问留言板时,会触发下面错误提示 // “TOKEN_INVALID_ANONYMOUS_USER 未能获取当前用户信息:当前用户为匿名身份” //并且界面会跳转到登录界面,而不是正常浏览留言板 //原因:未登录状态下访问$cloudEnv_uid引起的 //解决方法:在onLoad()中获取缓存中(getStorageSync部分)的登录信息, // 如果获取不到则说明未正常登录,未正常登录情况下只确定审核过的留言可显示,不判断是否显示登录者发表的未审核留言 //正常登录情况下则两个条件都判断 //当然了解决方法应该有很多种,希望高人不吝赐教,uni-app小白先谢谢了! //遇到的其他问题,数据提交数据库成功了但 this.$refs.udb.refresh() 刷新界面显示最新结果的功能未达预期,本人错在了 控件 { console.log(e); this.$refs.udb.refresh(); }}) }, async changeState(item){ //this.$refs.udb.update(item._id,{state:!item.state},{complete:e=>{ // console.log(e); // this.$refs.udb.refresh(); //}}) //视频教程中的上述方法,不可行,改为下面的 aluo 2022.10.24 原因是未添加 ref="udb" const db = uniCloud.database(); const res = await db.collection('guestbook') .doc(item._id) .update({ "state": !item.state, }).catch((e) => { console.log(e) }) if(!res.result.errcode){ uni.showToast({ title:'审核成功', icon: 'none' }); //this.text = '' this.$refs.udb.refresh()//更新后刷页面不启作用! aluo 2022.10.24 } }, add(){ const db=uniCloud.database(); const guestbookTable = db.collection("guestbook"); guestbookTable.add({ "text":"这是第2条留言", //"state": false, //"user_id":"beike" }); } } }

guestbook.schema.json { "bsonType": "object", "required": [], "permission": { "read": "auth.uid == null || doc.state == true || doc.user_id == auth.uid || 'AUDITOR' in auth.role", "create": "auth.uid != null", "update": "'AUDITOR' in auth.role", "delete": false }, "properties": { "_id": { "description": "ID,系统自动生成" }, "text": { "bsonType": "string" }, "state": { "bsonType": "bool", "forceDefaultValue": false }, "user_id": { "foreignKey": "uni-id-users._id", "bsonType": "string", "forceDefaultValue": { "$env": "uid" } } } }

找到方法之前走了不少弯路,最初都放在了表的read权限上了,全改为true也是出现问题,一步一步去实现登录者可以看到自己未审核的留言时发现了问题所在!期间几次都想放弃了,项目几次重新开始!问题解决了心里豁然开朗,原来如此,感觉真得超好! 希望能帮助到遇到同样问题的小白朋友,高手请忽略!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有