Вы можете написать собственный бэкэнд для аутентификации, который обрабатывает ваши два варианта использования. Смотрите документацию по написанию и с помощью пользовательских аутентификации бэкенд: http://docs.djangoproject.com/en/1.2/topics/auth/#other-authentication-sources
EDIT: Там, кажется, что может быть какой-то неправильное представление о том, как трудно это может быть, чтобы написать свой собственный бэкенд аутентификации. Из документов:
бэкэнд аутентификации является классом , который реализует два метода: get_user (user_id) и аутентификацию (** мандатных).
Это верно. Это любой класс, который реализует две функции, которые возвращают объекты User
.
Метод get_user принимает user_id - , который может представлять собой имя пользователя, идентификатор базы данных или любой другой - и возвращает пользователя объект.
... Аутентифицировать должен проверить учетные данные он получает, и он должен вернуть объект пользователя, соответствующий этих учетных данных, если учетные данные действительны. Если они недействительны, то должен вернуть None.
OP уже заявил, что ссылки содержат одноразовые ключи, которые он проверяет (и предположительно связан с пользователем, которого он хочет зарегистрировать). Другими словами, он уже написал бизнес-логику для бэкэнда, ему просто нужно было преобразовать его в подходящий класс.
Пользовательские серверы аутентификации могут выполнять ряд потрясающих вещей в Django 1.2, например, разрешения на уровне объектов, но они не обязательно должны быть такими сложными. Кроме того, они складываются, поэтому вы можете смешивать свою аутентификацию на основе токенов с бэкэндом по умолчанию или OpenID или Facebook.Но в конце концов, бэкэнд-сервер является просто классом с двумя методами, и я не вижу, как вы можете назвать это излишеством.
Технически эти два случая использования также применяют аутентификацию, просто другими способами: именно уникальный токен, который вы указываете в URL-адресе. – MSalters