码上致富
码上致富
  • 发布:2021-03-25 19:30
  • 更新:2021-09-29 15:27
  • 阅读:2884

重新生成token调用校验token方法每次都报错提示错误信息:token不合法,请重新登 这是BUG吗?

分类:uniCloud

功能很简单,调用校验token进行校验,如果失败,则重新生成token,下次刷新的时候,在对这个token校验,但是每次去校验的时候都会报错,提示token不合法,请重新登,这是啥情况??????我调用createToken多次,数据库里的token字段未有变化,只有固定的两个值

文档里虽然说了,那这又有啥做用?用checkToken校验时又报错。。。难道我这边生成了token,还要将他更改到数据库了?

这是请求过程日志:

storage中的token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI2MDViNDQ3NzhiMDRkNTAwMDEzN2NjNTgiLCJjbGllbnRJZCI6IjllYjdkNTA1ZDk5NGRmNzM3ODg3NzYwYmYxNzExOTgzIiwiaWF0IjoxNjE2NjcxMjAxLCJleHAiOjE2MTY2Nzg0MDF9.USSBabRy4DWWnd8aGpKFHdGPDUykE2KTVvZ-qvaAP5g  
index.js? [sm]:241 校验token是否有效:{"success":true,"header":{"x-fc-code-checksum":"14931192961446868056","access-control-expose-headers":"Date,x-fc-request-id,x-fc-error-type,x-fc-code-checksum,x-fc-invocation-duration,x-fc-max-memory-usage,x-fc-log-result,x-fc-invocation-code-version","x-fc-invocation-service-version":"LATEST","content-disposition":"attachment","x-serverless-request-id":"ac1410431616671282815155174","x-serverless-runtime-version":"1.2.1","content-length":"126","date":"Thu, 25 Mar 2021 11:21:22 GMT","x-fc-request-id":"5af4c04b-d4fa-4ece-90a3-d31905c7c3e2","x-fc-invocation-duration":"91","x-fc-max-memory-usage":"34.81","content-type":"application/json"},"result":{"code":30202,"msg":"token不合法,请重新登录","message":"token不合法,请重新登录"},"requestId":"ac1410431616671282815155174"}  
index.js? [sm]:181 --用户是否授权--true  
index.js? [sm]:182 --用户是否登陆--true  
index.js? [sm]:257 重新生成token响应数据:{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI2MDViNDQ3NzhiMDRkNTAwMDEzN2NjNTgiLCJjbGllbnRJZCI6IjllYjdkNTA1ZDk5NGRmNzM3ODg3NzYwYmYxNzExOTgzIiwiaWF0IjoxNjE2NjcxMjgzLCJleHAiOjE2MTY2Nzg0ODN9.eQXIeRtQKfPxGz0IgjSV1RL37XDI41MSgXEGymoU_sQ","tokenExpired":1616678483099}  
index.js? [sm]:259 设置token过期时间:1616678483099

代码:

                  var uniIdToken = uni.getStorageSync('uni_id_token');  
                  var uniUid = uni.getStorageSync('uni_uid');  
                  //var uniUid = "605b44778b04d5000137cc58";  
                  console.info('用户ID:' + uniUid)  
                  console.info('storage中的token:' + uniIdToken)  
                  if(util.isEmpty(uniIdToken)){  
                       console.info('校验token,token为空');  
                       reject(false);  
                  }else{  
                      uniCloud.callFunction({  
                        name: 'user-center',  
                        data: {  
                            action: 'checkToken'  
                        },  
                        params: {  
                            uniIdToken:uniIdToken  
                        },  
                        success(res) {  
                            const {  
                                code,  
                                token,  
                                tokenExpired  
                            } = res.result  
                            console.info('校验token是否有效:' + JSON.stringify(res))  
                            if("0" != code){  
                                  //token过期,从新获取  
                                  uniCloud.callFunction({  
                                    name: 'user-center',  
                                    data: {  
                                        action: 'createToken',  
                                        params: {  
                                            uid:uniUid  
                                        },  
                                    },  
                                    success(res) {  
                                        const {  
                                            token,  
                                            tokenExpired  
                                        } = res.result  
                                        console.info('重新生成token响应数据:' + JSON.stringify(res.result))  
                                        if(token){  
                                            console.info('设置token过期时间:' + tokenExpired)  
                                            uni.setStorageSync('uni_id_token', token)  
                                            uni.setStorageSync('uni_id_token_expired', tokenExpired)  
                                        }  
                                        resolve(true);  
                                    },  
                                    fail(e) {  
                                        console.error(e)  
                                        reject(false);  
                                    }  
                                  })                                  
                            }else{  
                                if(token){  
                                    console.info('token过期时间:' + tokenExpired)  
                                    uni.setStorageSync('uni_id_token', token)  
                                    uni.setStorageSync('uni_id_token_expired', tokenExpired)  
                                }  
                            }  
                            resolve(true);  
                        },  
                        fail(e) {  
                            console.error(e)  
                            reject(false);  
                        }  
                      })  
                  }
2021-03-25 19:30 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

错误提示的很明确,对照错误码就能知道云端不包含此token

  • 码上致富 (作者)

    这种怎么解决?用的是createToken创建的token,然后又用checkToken去校验的,报这种错

    2021-03-25 21:12

  • 码上致富 (作者)

    我这边难道调用createToken之后,还要新的token更新到数据库中去?

    2021-03-25 21:30

  • DCloud_uniCloud_WYQ

    回复 码上致富: 需要createToken的说明里面有说创建的token不会自动存库

    2021-03-29 10:48

  • DCloud_uniCloud_WYQ

    回复 码上致富: 如果要实现比较特别的需求,推荐看一下uni-id源码

    2021-03-29 10:48

  • 清茶涩

    大哥,不用uni-id体系的话,如果校验当前用户。比如腾讯官方用cloud.getWXContext()可以拿到当前用户的openId,那unicloud如何拿到当前用户。卡在这里了,一直没敢做项目

    2021-04-22 14:24

秋峰

秋峰 - 微信小程序开发 云开发 serverless

嗯 如果想通过后端来获取token 给到前台调用 要如何做呢?
直接调用 createToken 然后前端使用此接口返回的token 就会提示 云端已不包含此token
是需要自己将token写入到数据库里的token 字段吗?

该问题目前已经被锁定, 无法添加新回复