过时的令牌,即使是第一次用户Djoser和DRF



新注册的用户收到激活电子邮件。他点击链接并移动到激活页面。然后他点击验证按钮,该按钮从链接中获取uid和令牌并将其发布到auth/users/activation/,然后无论他在验证链接上点击链接的速度有多快,都会得到响应stale token for the given user。结果是一样的。我使用djoser进行激活,并在前端使用所有与用户相关的stuff.and redux进行api调用,还使用React作为前端这是我的设置

SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(days=30),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'AUTH_HEADER_TYPES': ('JWT','Bearer'),
'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule' ,
'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
}
DJOSER = {
'LOGIN_FIELD': 'email',

'USERNAME_CHANGED_EMAIL_CONFIRMATION': True,
'PASSWORD_CHANGED_EMAIL_CONFIRMATION': True,
'SEND_CONFIRMATION_EMAIL': True,
'SET_USERNAME_RETYPE': True,
'SET_PASSWORD_RETYPE': True,
'PASSWORD_CHANGED_EMAIL_CONFIRMATION':True,
'PASSWORD_RESET_CONFIRM_URL': 'password/reset/confirm/{uid}/{token}',

'SEND_ACTIVATION_EMAIL': True,
'ACTIVATION_URL': 'activate/{uid}/{token}',
'SOCIAL_AUTH_TOKEN_STRATEGY': 'djoser.social.token.jwt.TokenStrategy',
'SOCIAL_AUTH_ALLOWED_REDIRECT_URIS': ['https://negoziohub.herokuapp.com/google', 'http://127.0.0.1:8000/facebook'],
'SERIALIZERS': {
'user_create': 'base.serializers.UserSerializer',
'user': 'base.serializers.UserSerializer',
'user_delete': 'djoser.serializers.UserDeleteSerializer',
}
}

这里是userAction.js:


export const activate = (uid, token) => async (dispatch) => {
try {
dispatch({
type: USER_ACTIVATE_REQUEST
})

const config = {
headers: {
'Content-type': 'application/json',

}
}
const body = JSON.stringify({ uid, token });
const { data } = await axios.post(`/auth/users/activation/`, body,
config
)
dispatch({
type: USER_ACTIVATE_SUCCESS,
payload: data
})
// dispatch(login())
localStorage.setItem('userInfo', JSON.stringify(data))

} catch (error) {
dispatch({
type: USER_ACTIVATE_FAIL,
payload: error.response && error.response.data.detail
? error.response.data.detail
: error.message,
})
}
}

如有任何帮助,我们将不胜感激。谢谢❤❤❤

我知道现在回答你的问题已经太晚了,但我会为未来可能面临同样问题的其他人做这件事。

我也遇到了同样的问题,在互联网上找不到任何东西,这促使我深入研究Djoser的源代码。在我的案例中,问题是我更改了默认行为,以更改用户的状态并设置user.is_active = True。这是Djoser在user.is_active != False时发送过时令牌错误时出现的问题。

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新