django-vue-admin icon indicating copy to clipboard operation
django-vue-admin copied to clipboard

SIMPLE_JWT 刷新token优化

Open Chuanwei opened this issue 2 years ago • 0 comments

目前的代码REFRESH_TOKEN刷新机制尚未完善,自己摸索了一下,可按以下配置: token2天过期,到期后使用REFRESH_TOKEN刷新,直到 REFRESH_TOKEN也过期,则必须重新登录。cookie 中配置 expires: 2,2天后过期也必须重新登录,如果cookie被别人拿到,原理上则可以一直刷新token使用14天。建议'ROTATE_REFRESH_TOKENS': False,强制过期。

1.settings.py

SIMPLE_JWT = { # 认证token有效时长 2天 'ACCESS_TOKEN_LIFETIME': timedelta(days=2), # 刷新token有效时长 14天,用于ACCESS_TOKEN过期后重新获取 'REFRESH_TOKEN_LIFETIME': timedelta(days=14), # 设置前缀 'AUTH_HEADER_TYPES': ('JWT',), # 若为True,则刷新后新的refresh_token有效时间自动延长,客户端可以一直获得新的token,不安全 # 若为False,REFRESH_TOKEN到期即失效 'ROTATE_REFRESH_TOKENS': False, }

  1. service.js

// 响应拦截 service.interceptors.response.use( .............略 // 刷新token case 401: //目前看msg存在messages则说明是access-token过期 if (dataAxios.msg.code === 'token_not_valid' && dataAxios.msg.messages) { // 如果access-token过期则使用refresh-token刷新 if (dataAxios.msg.messages[0].token_type === 'access') { refreshTken().then(res => { util.cookies.set('token', res.access) router.go(0) }) } } else { // 如果refresh-token过期则直接退出登录 errorCreate(${getErrorMessage(dataAxios.msg)}) } // --------------chuanwei-at-2022.4.22-------- break

3.util.cookies.js

cookies.set = function (name = 'default', value = '', cookieSetting = {}) { const currentCookieSetting = { expires: 2 }

Chuanwei avatar May 04 '22 05:05 Chuanwei