Написание логики аутентификации / входа в Django с сессиями - PullRequest
1 голос
/ 16 сентября 2011

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

У меня есть модель для аутентификации, которая выглядит следующим образом:

class User(models.Model):
    email_address = models.CharField(max_length=128)
    password = models.CharField(max_length=128) # sha512 of password w/salt
    password_salt = models.CharField(max_length=128) # sha512 of random number as salt

По сути, я бы написал метод входа в систему для такого представления:

@ratelimit_post(minutes = 1, requests = 5, key_field = 'email_address')
def login(request):
    requestedUser = User.objects.get(email_address=request.POST['email_address'])

    if requestedUser == None:
        fail_no_user()

    passwordHash = sha512(request.POST['password'] + requestedUser.password_salt)

    if requestedUser.password != passwordHash:
        fail_wrong_password()
    else:
        request.session['user_id'] = user.id
        request.session['is_auth'] = True
        success_login()

Это безопасный способ обработки логинов и сеансов с Django? Так как я все еще новичок, я не уверен, является ли это принятым подходом. Есть ли что-то в плане безопасности и производительности, чего мне здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Вероятно, лучшим вариантом является создание собственного бэкэнда.

См. Документы здесь: https://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend

Написание бэкенда аутентификации

Бэкэнд аутентификацииэто класс, который реализует два метода: get_user (user_id) и authenticate (** учетные данные).

0 голосов
/ 16 сентября 2011

Django поставляется с очень простой и мощной системой аутентификации, здесь является официальным документом.

...