功能很简单,调用校验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);
}
})
}

码上致富 (作者)
这种怎么解决?用的是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