Django, ограничить доступ к странице успешной регистрации - PullRequest
3 голосов
/ 23 августа 2010

Это то, о чем я удивлялся в паре фреймворков, с которыми я портился.Предполагая, что я не хочу автоматически регистрировать пользователя при регистрации (я хочу, чтобы он активировал), как я могу сделать так, чтобы пользователь не мог просто посетить страницу «регистрация-успех»?Прямо сейчас, вот что у меня есть:

def register(request):
    if request.method == 'POST':
        rf = forms.RegisterForm(request.POST)#register form
        pf = forms.ProfileForm(request.POST)#profile form (additional info)
        lf = forms.LoginForm()#login form is also on this page but is empty when registering
        if rf.is_valid() and pf.is_valid():
            newuser = User(username=rf.cleaned_data['username'],email=rf.cleaned_data['email'])
            newuser.set_password(rf.cleaned_data['password'])
            newuser.save()
            #need to mark newuser as inactive still
            profile = pf.save(commit=False)
            profile.user = newuser
            profile.save()
            return HttpResponseRedirect("/register-success/")
        return render_to_response("authentication/index.html", {'rform': rf, 'pform':pf,'lform':lf})
    return main(request)

def register_success(request):
    return render_to_response("authentication/register-success.html")

Мой url-conf:

(r'^register-success/$','register_success'),

Другой способ, которым я думал сделать это, это просто render_to_response ("аутентификация / регистрация-успех".html ") и не делайте редирект.Преимущество в том, что никто не может получить доступ к странице register-success.html, недостатком является то, что если пользователь обновит страницу, он попытается и повторно отправит POST.Какая лучшая практика?

Ответы [ 2 ]

1 голос
/ 23 августа 2010

Я бы придерживался переадресации, получение дублирующих пользователей - довольно большой риск. Каков риск того, что кто-то не увидит вашу страницу успеха при регистрации? Если есть риск, вы всегда можете сгенерировать случайный токен, поместить его в сеанс и передать его на страницу регистрации успеха, а затем, по вашему мнению, проверить, соответствует ли токен. Но это похоже на большую работу для типичных страниц успеха.

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

1 голос
/ 23 августа 2010

Вы можете установить cookie, ключ сеанса в представлении register, которое можно проверить в представлении register_success только при его наличии, отобразить страницу, иначе перенаправить в основной регистр.

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