whr2349
whr2349
  • 发布:2021-01-29 10:30
  • 更新:2023-06-10 11:18
  • 阅读:2682

unicloud 前端db JQL里面有一个刷新token的方法,对这个非常不理解,请教一下

分类:uniCloud

刷新token
透传uni-id自动刷新的token给客户端

用法

const db = uniCloud.database()

function refreshToken({
token,
tokenExpired
}) {
uni.setStorageSync('uni_id_token', token)
uni.setStorageSync('uni_id_token_expired', tokenExpired)
}
// 绑定刷新token事件
db.on('refreshToken', refreshToken)
// 解绑刷新token事件
db.off('refreshToken', refreshToken)

以上的官方的描述
好像是说tokenExpired过期了,可以主动用这个方法主动无痛刷新token,请求到新的tokenExpired,保存,就不用用户推出去再登录了,可是这个东西怎么用呢?之前admin项目里是通过前端直接判断tokenExpired过期了就退出,也没用到这个刷新token的方法啊。
不知道这个刷新token怎么调用,请解答一下

2021-01-29 10:30 负责人:DCloud_uniCloud_WYQ 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

这个并不是用来调用主动刷新token的,而是在token刷新的时候触发这个回调。类似admin项目里面 js_sdk/uni-admin/request 内SET_TOKEN的逻辑
你可以在这个文件里面加上下面的代码,admin也会补充这个逻辑

const db = uniCloud.database()  
db.on('refreshToken', function({  
    token,  
    tokenExpired  
}) {  
    store.commit('user/SET_TOKEN', {  
        token,  
        tokenExpired  
    })  
})
  • whr2349 (作者)

    哦哦 谢谢 我有点明白了!

    可是我在uniid里面设置的长token过期时间1分钟,短token过期时间10秒钟。最终还是1分钟,退出到登录页了。

    框架里好像自带了刷新短token的机制吗?我也没用上面的代码。。。。。。所以我一直以为刷新token的这个代码是只要长token过期了,就再请求一个,让客户端一直保持登录呢。

    我怎么让客户端一直保持登录呢?是不是要自己写云函数实现啊?

    2021-02-03 09:41

  • DCloud_uniCloud_WYQ

    回复 whr2349: 一直保持登录?一般没有这么做的。uni-id的配置里面有个tokenExpiresThreshold,这个的用途是在即将过期时checkToken接口返回新token,重新设置上就行了。可以看一下uni-admin那个云函数的逻辑

    2021-02-03 17:34

  • masion

    回复 DCloud_uniCloud_WYQ: 可以看一下uni-admin那个云函数的逻辑在哪看????

    2021-05-08 16:03

  • DCloud_uniCloud_WYQ

    回复 masion: 新建项目的时候选择uniCloud admin模板

    2021-05-17 14:50

  • 6***@qq.com

    回复 DCloud_uniCloud_WYQ:

    您好!我对 db.on('refreshToken', refreshToken) 这个有点不理解,这是一个长连接吗?这个后台是怎么触发到前端的?还有 db.on只能监听 refreshToken 、error 这两个事件吗?

    2021-06-25 14:57

  • DCloud_uniCloud_WYQ

    回复 6***@qq.com: 在发送clientDB请求时才会触发,不发不会触发,并非长链接

    2021-06-25 16:09

  • 6***@qq.com

    回复 DCloud_uniCloud_WYQ: 触发原理是客户端的一个事件总线,是这个意思吗?

    2021-06-25 16:16

w***@qq.com

w***@qq.com - 我很懒

前端访问云函数会触发这个db.on("refreshTocken",refreshTocken)吗

w***@qq.com

w***@qq.com - 我很懒

访问云函数时,是不是要在unicloud.callfunction的拦截器里添加检查刷新token的代码

r***@163.com

r***@163.com

我checkToken的时候,返回的token发生了改变,为什么db.on('refreshToken')没有触发?

  • DCloud_uniCloud_WYQ

    db.on('refreshToken')只在clientDB请求云端返回新token时才会触发,你自己checkToken是不会触发的,需要你自行保存

    2022-05-16 13:38

8***@qq.com

8***@qq.com

unicloud的公共模块内如何实现token保存在后台的啊?是不是存在数据库里,每次请求难道都要去数据库校验一次token吗?

5***@qq.com

5***@qq.com

也是遇到TOKEN刷新的问题,MARK一下

要回复问题请先登录注册