更新CSRF_TOKEN

时间:2015-10-09 00:49:13

标签: django

我有一个应用程序,我希望用户能够在保持登录状态时更改密码。

我这样做:

request.user.set_password(password)
request.user.save()
request.user.backend='django.contrib.auth.backends.ModelBackend'
auth_login(request, request.user)

它更改了密码,我再次登录以保持用户会话。但显然如果我这样做,我在js客户端中保存为变量的CSRF_TOKEN不再有效,我无法将其用于POST请求。

有没有办法续订CSRF_TOKEN并将其发送给客户?

1 个答案:

答案 0 :(得分:2)

从视图中,您可以使用以下方式获取令牌:

from django.core.context_processors import csrf
print unicode(csrf(request)['csrf_token'])

至于如何更新你的js客户端,在提供好的建议之前我需要更多关于它的细节。我想它就像从登录请求中返回新令牌一样简单。我想你的登录名是ajax,所以你可以在响应中返回新的令牌并写一些JS来更新你存储的令牌:

import json
return HttpResponse(json.dumps({"csrf_token": unicode(csrf(request)['csrf_token'])), content_type="application/json")