비밀번호 재설정 이메일을 수동으로 보내야 새로운 사용자를 만들 수 있습니다. 나는 here에 설명 된 단계를 따르고 드라이브 바이 HttpRequest (pwreset_request = HttpRequest()
)를 만들었지 만, PasswordResetView.as_view()(pwreset_request)
을 호출하는 대신에 잘못된 CSRF 토큰 때문에 403이 반환됩니다.수동으로 비밀번호 재설정 이메일을 보내는 방법은 무엇입니까?
그럼에도 불구하고 (결과적으로 그 이메일을 받고 있음에도 불구하고) 페이지에 오류가 없으며 모든 것이 잘 작동합니다.
from django.http import HttpResponseForbidden, HttpResponse, HttpRequest
from django.middleware.csrf import get_token
@login_required
@permission_required(["abonnenten.verlag_sachbearbeiter_fullaccess"])
def sachbearbeiter_create_or_edit(request, username=None):
mode = "create" if username is None else "edit"
if mode == "create":
user = None
sachbearbeiter = None
else:
user = get_object_or_404(User, username=username)
sachbearbeiter = user.sachbearbeiter
if user.is_superuser or user.is_staff:
raise PermissionDenied
user_form = UserForm(request.POST or None, instance=user)
sachbearbeiter_form = SachbearbeiterForm(request.POST or None, instance=sachbearbeiter)
if request.method == 'POST':
if mode == "create":
if user_form.is_valid() and sachbearbeiter_form.is_valid():
user = user_form.save(commit=False)
user.email = user.username
user.save()
sachbearbeiter = sachbearbeiter_form.save(commit=False)
sachbearbeiter.user = user
sachbearbeiter.save()
# Manually send password reset mail
# TODO Fix this shit (403)
pwreset_request = HttpRequest()
pwreset_request.method = 'POST'
pwreset_request.META['HTTP_HOST'] = request.META['HTTP_HOST']
pwreset_request.POST = {'email': user.email, 'csrfmiddlewaretoken': get_token(HttpRequest())}
PasswordResetView.as_view()(pwreset_request)
messages.success(request, 'Der Datensatz wurde erfolgreich gespeichert.')
return redirect('sachbearbeiter_edit', username=user.username)
elif mode == "edit":
if user_form.is_valid() and sachbearbeiter_form.is_valid():
user = user_form.save(commit=False)
user.email = user.username
user.save()
sachbearbeiter_form.save()
messages.success(request, 'Der Datensatz wurde erfolgreich gespeichert.')
return redirect('sachbearbeiter_edit', username=user.username)
else:
raise ValueError("Variable `mode` must be 'create' or 'edit'")
return render(request,
'sachbearbeiter/edit_or_create.html',
{'mode': mode,
'user': user,
'user_form': user_form,
'sachbearbeiter_form': sachbearbeiter_form})
아이디어를 수정하는 방법은 무엇입니까?
내가 그 사람을 도움이 생각하지 않지만, 여기 당신은 간다 :이 코드에 의해
:
그래서 아래의 모든 코드를 대체합니다. – Daniellol 템플릿은 무엇이 필요합니까? 이것은 템플릿과 관련이 없으며 더 이상 쓸데없는 혼란으로 내 질문에 홍수를 내지 않을 것입니다. – Daniel
다시 템플릿이나보기에는 문제가 없습니다. 'pwreset_request = HttpRequest()'에만 문제가 있습니다. 나는 이미'get_token (HttpRequest())'를 사용하지 않으려 고했다. – Daniel