Как вручную пройти аутентификацию после получения пользователя django? - PullRequest
10 голосов
/ 21 января 2011

Я пишу приложение для подключения к Facebook, которое регистрирует пользователя после аутентификации на Facebook, вопрос в том, как я могу аутентифицировать пользователя на django после получения объекта пользователя?

user = User.objects.get(email=email)
user = authenticate(username=user.username, password=user.password)
login(request, user)

Есть ли другой способ добиться этого?

Ответы [ 3 ]

18 голосов
/ 21 января 2011

На самом деле вам не нужно сначала проходить проверку подлинности (), если вы делаете это (но я вам не говорил!):

user.backend = 'django.contrib.auth.backends.ModelBackend'

login(request, user)

4 голосов
/ 21 января 2011

Есть две вещи, на которые вы должны обратить внимание и знать о них, основываясь на вашем вопросе и примере.

Во-первых, способ обработки альтернативных методов аутентификации (например, Facebook oauth) - бэкэнды аутентификации .Вы можете посмотреть на djangopackages.com для существующих опций или написать свой собственный.Заданные вами бэкэнд (ы) определяют, какие параметры authenticate() ожидает получить (например, бэкэнд Facebook не будет ожидать пароль, поскольку пароль не имеет смысла в этом контексте).

Во-вторых, выполнение user.password не даст вам действительный пароль пользователя.В качестве меры безопасности Django хранит пароли как соленые односторонние хэши .Это означает, что по своей сути вы не можете определить пароль пользователя на основе того, что хранится в базе данных.

1 голос
/ 21 января 2011

authenticate() и login() предоставляют разные задачи, и для входа в систему требуются обе (или эквивалент, извлеченный из кода Django и обновленный для каждой версии Django ).

...