2

웹 사이트에서 CMS (Content Management System)와 같은 프로젝트를 진행하고 있습니다. 나는이 시스템을 장고 파이썬으로 개발 중이다. 하지만 장고 파이썬을 처음 사용합니다.Django Python 사용자 비밀번호를 암호화하는 방법

저는 사용자 이름, 이메일, 암호 등의 필드가 포함 된 내 자신의 사용자 모델 (장고 사용자 모델 아님)을 가지고 있으며 내 관리자 패널에서 새 사용자를 만듭니다.

로그인 페이지에 게시 된 사용자 비밀번호와 암호화 된 비밀번호를 어떻게 비교할 수 있습니까?

예를 들어 pbkdf2_sha24123 $ 000asd $와 같이 db에 저장된 123의 암호를 처음 작성한 경우 ... 암호 123으로 로그인하려고 시도했지만 암호가 같지 않은 오류가 발생합니다.

from django.contrib.auth.hashers import make_password 
from account.models import myUsers 

password = make_password(request.POST.get('password')) 
email = request.POST.get('email') 

if myUsers.password == password and myUsers.email == email: 
    #make login and redirect to panel 
else: 
    #show error message 

내 자신의 모델처럼;

class myUsers(models.Model): 
    username = models.CharField(max_length=25, verbose_name='username', unique=True) 
    email = models.CharField(max_length=225, verbose_name='email', unique=True) 
    password = models.CharField(max_length=225, verbose_name='password') 
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='created date') 
    secret_question = models.CharField(max_length=225, verbose_name='secret question') 
    secret_answer = models.CharField(max_length=225, verbose_name='secret answer') 
    last_login = models.DateTimeField(verbose_name='last login') 
    secret_guid_key = models.CharField(max_length=15, verbose_name='recover key', unique=True, editable=False, default=uuid.uuid4().hex[:15]) 
    user_role = models.CharField(max_length=6, verbose_name='member role') 
+0

django 자체 로그인/가입 시스템이 있으며 이것으로 확인하기가 너무 쉽습니다 [link] (https://simpleisbetterthancomplex.com/tutorial/2016/06/27/how-to-use- djangos-built-in-login-system.html) –

+0

@mohammedqudah 코멘트를 주셔서 감사하지만 그것을 사용하고 싶지는 않습니다. 나는 단지 내 자신의 모델을 만들려고 노력하고있다. – bullception

+0

추가 필드 용으로 사용자 모델을 만든 경우 django에서 사용자 모델 확장에 대한 내용을 읽어보십시오. [link] (https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user -model.html) –

답변

0

나는 장고 인증 기능을 시도해야한다고 생각합니다.

user = authenticate(username=username, password=password) 
0

당신은 비교 shuoldn't 암호 :

if myUsers.password == password ..: 

아니라 암호의 해시 :

if myUsers.password == myPasswordHashFunction(password) ..: 

방법 myPasswordHashFunction를 작성하는 당신에게 상세하게 알고있는, 또는해야 뭔가 django의 authenticate 기능을 사용하는 것이 더 좋습니다.

보안 전문가가 아닌 경우 사용자를 인증하고 권한을 부여하는 자체 방법을 개발하지 마십시오.

+0

. 나는 그것을 재고 할 것이다. – bullception

관련 문제