Django Auth kullanan Uygulamanin kimlik dogrulama yontemini degistirme

Başlatan cagriemer, 05 Mart 2012 - 07:17:18

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

cagriemer

Elimde hazirda kullanilmakta olan bir veritabani var. Bu veritabaninda kullanici sifreleri sha1($salt+$pass) olarak saklaniyor. Kuracagim yeni bir django uygulamasinin, bu veritabanini kullanarak kullanici dogrulamasi yapmasini istiyorum. En alt katmanda (ornegin veritabanindan sifreler cekilirken ya da o sekilde mumkun degilse cekilen sifreler kontrol edilirken -authenticate fonksiyonu oluyor o da sanirim-) olacak sekilde nasil bir degisiklik yapmaliyim? Ya da boyle bir degisiklik yapmak yerine yeni bir veritabani mi kullanmaliyim?

django.contrib.auth.models altinda asagida tanimli get_hexdigest ve check_password fonksiyonlarini kurcalasam istedigim olur mu? Aslinda bu is boyle mi yapiliyor sormak istedigim o. [1] adresine gore kendi authentication backend'imi yazmam gerekiyormus. Oyle bir sey yazsam bile onu kendi yazmadigim uygulamada nasil kullanabilirim? Her turlu kaynak, oneri, fikir kabulumdur.

Simdiden tesekkurler.

[1] http://www.djangobook.com/en/1.0/chapter16/

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 e
nvironment')
        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))