パスワードリセットメールを手動で送信して、新しいユーザーを作成する必要があります。私はhereと記載されている手順に従い、ドライブバイHttpRequest(pwreset_request = HttpRequest()
)を作成しましたが、無効なCSRFトークンがあるため、PasswordResetView.as_view()(pwreset_request)
を呼び出すことに戻るのは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})
これを修正する方法はありますか。
を私は誰も助けないと思いますが、ここに行きます。 – Daniel
笑テンプレートは何のために必要ですか?これはテンプレートとは関係がありませんし、私の質問にはもう役に立たない混乱はありません。 – Daniel
また、テンプレートやビューに問題はありません。これは 'pwreset_request = HttpRequest()'のみの問題です。私はすでに 'get_token(HttpRequest())'を無駄にしようとしました。 – Daniel