目前的代码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
}