Перенос пользователей django на рельсы - PullRequest
1 голос
/ 09 ноября 2011

В настоящее время у меня есть система с django, которую мне нужно перенести на рельсы. Я использую Devise для авторизации в рельсах. Старая система django имеет свой собственный набор пользователей, которые мне нужно перенести на рельсы. Дело в том, что меня беспокоит пароль пользователей. Он зашифрован с использованием алгоритма sha1. Итак, как я могу изменить устройство так, чтобы оно было совместимо и со старым паролем пользователя.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

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

Оформить заказ django/contrib/auth.models.py, check_password(raw_password, enc_password) - это то, что вам нужновнедрить в вашу систему аутентификации Rails:

def get_hexdigest(algorithm, salt, raw_password):
    """
    Returns a string of the hexdigest of the given plaintext password and salt
    using the given algorithm ('md5', 'sha1' or 'crypt').
    """
    raw_password, salt = smart_str(raw_password), smart_str(salt)
    if algorithm == 'crypt':
        try:
            import crypt
        except ImportError:
            raise ValueError('"crypt" password algorithm not supported in this environment')
        return crypt.crypt(raw_password, salt)

    if algorithm == 'md5':
        return md5_constructor(salt + raw_password).hexdigest()
    elif algorithm == 'sha1':
        return sha_constructor(salt + raw_password).hexdigest()
    raise ValueError("Got unknown password algorithm type in password.")

def check_password(raw_password, enc_password):
    """
    Returns a boolean of whether the raw_password was correct. Handles
    encryption formats behind the scenes.
    """
    algo, salt, hsh = enc_password.split('$')
    return constant_time_compare(hsh, get_hexdigest(algo, salt, raw_password))
1 голос
/ 04 сентября 2012

В моей модели пользователя используется следующий метод:

def valid_password?(pwd)
    begin
        super(pwd)
    rescue
        my_pwds = self.encrypted_password.split '$'
        Digest::SHA1.hexdigest( my_pwds[1] + pwd ) == my_pwds[2] rescue false
    end
end

Это расширяет пароль по умолчанию?метод, используемый Devise для проверки правильности ввода пароля пользователем.Сначала пользователь проверяется с помощью обычной логики устройства, и если это не работает, запускается логика Django sha1.Таким образом, разработка паролей также поддерживается, поэтому в будущем проблем с совместимостью не будет.

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