Этот вопрос задал много вопросов о SO, но ни одно из этих решений не сработало для меня. Мне интересно, чего мне не хватает. Я использую пример от Effective Django. Это позволило мне создать форму «register», которая будет перенаправлена на «/» после успеха. Корневая страница перенаправляется на форму входа, если пользователь уже не зарегистрирован. Все, что я хочу, это форма регистрации, чтобы автоматически регистрировать пользователя при регистрации.Автоматический вход в Django 1.8
Я создал в views.py
RegisterView()
а, который просто пытается аутентифицировать/пользователей для входа в form_valid()
:
class RegisterView(CreateView):
template_name = 'register.html'
form_class = forms.UserCreateForm
success_url='/'
def form_valid(self, form):
user = form.save()
user = authenticate(username=self.request.POST['username'], password=self.request.POST['password1'])
login(self.request, user)
return super(RegisterView, self).form_valid(form)
Этот вид работ. Я попытался создать исключение, если user.is_authenticated() == False
, и никаких исключений не возникает. Однако к моменту переадресации браузера на success_url
, по-видимому, информация для входа теряется, и декодер @login_required
делает вход пользователя перед просмотром /
.
Я также пытался сделать user.backend = 'django.contrib.auth.backends.ModelBackend'
до звонка до login(...)
; и я также установил AUTHENTICATION_BACKENDS
.
Что-то значительно изменилось в 1.8, чтобы предотвратить это? Все, что я видел в Интернете, это решение, но для меня это просто не работает.
Примечание: после регистрации пользователь может войти вручную.
Я заметил, что вы используете CreateView, вместо этого вы пытались использовать FormView? – Joseph
@Joseph CreateView является подклассом FormView. –
@ Joseph на самом деле я пробовал использовать FormView, и теперь он работает точно так, как я ожидаю. Почему это работает, если (как упоминал Род) CreateView является подклассом FormView? – sagargp