django-vue-admin
django-vue-admin copied to clipboard
SIMPLE_JWT 刷新token优化
目前的代码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, }
- 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 }