Передача переменной в форме Django, которую пользователь не может редактировать - PullRequest
0 голосов
/ 21 сентября 2019

Я хотел бы сгенерировать случайный одноразовый пароль для пользователя, который отображается в виде отключенного поля в форме Django.

Пароль будет показан в форме пользователю на странице,и пользователь не сможет редактировать его, но он будет отправлен вместе с формой.Я не хочу, чтобы мои пользователи устанавливали свои собственные пароли, но я хочу сказать им, какой у них пароль.

Каков наилучший способ гарантировать, что одноразовый пароль, сгенерированный для пользователей, не редактируетсяпо пользователям?Я использовал переменные сеанса, чтобы запомнить значение, чтобы я мог подтвердить, что оно не было изменено при отправке.

def my_page(request):

    # If submitted
    if request.method == "POST":

        # Check to make sure passcode wasn't altered
        if (request.POST.get('passcode') == request.session['pw']):
             ... rest of function here ...

    # Generate passcode and store it the session
    request.session['pw'] = genRandomPassword()

    # Init the form with a passcode
    form = MyForm(initial={'passcode': request.session['pw']})
    return render(request, 'example.html', {'form': form})

Есть ли лучший способ выполнить то, что я пытаюсь сделать?Я думаю, что то, что я делаю, работает, пока пользователи не могут редактировать свои переменные сеанса.Он сломается, если пользователь откроет другую вкладку, так как тогда будет сгенерирована вторая переменная сеанса пароля.

Я не хочу хранить коды доступа в базе данных.

1 Ответ

1 голос
/ 22 сентября 2019

Я думаю, что вместо проверки request.POST.get('passcode') == request.session['pw'] просто игнорируйте данные внутри POST и используйте данные из session, чтобы даже пользователь каким-то образом изменил пароль, который вам не нужен (обратите внимание, что вам даже не нужночтобы добавить pw к форме, это может быть переменная контекста шаблона)

Примечание: лично я считаю, что ваше решение не очень хорошая идея, не создавайте пароль перед отправкой, дайте пользователю заполнить формуи после успешной отправки создайте свой случайный пароль, после отправки покажите пользователю страницу, сообщив, что ваша форма была отправлена ​​и ваш пароль blah blah

Примечание 2. Проблема с вашим решением заключается в том, что я открываю страницу и сгенерировалпароль - 1, затем я открываю новую вкладку, и мой сгенерированный пароль - 2, (и теперь 2 сохраняется в сеансе как pw). Я иду, заполняю форму на первой странице и отправляю ее.что происходит сейчас?с вашим примером кода вы должны показать ошибку пользователю, но пользователь не сделал ничего плохого, и с моим исправлением (первый абзац) пользователь думает, что его пароль 1, но на самом деле 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...