2013-08-25 1 views
-6

Django 및 Python을 처음 사용합니다. 나는 문서를 읽었고 표준 로그인 시스템은 사용자 로그인을 위해 전자 메일과 암호를 사용하기 때문에 나에게 좋지 않습니다.사용자 정의 Django 로그인, 비밀번호를 비교할 수 없습니다.

그래서 저는 뷰와 모델로 새로운 앱을 만들었습니다.

내 로그인 기능은 다음과 같습니다.

def login(request): 

    if request.method == 'POST': 
     usermail = request.POST['usermail'] 
     password = request.POST['password'] 
     password = hashlib.md5(password).hexdigest() 

     if usermail == '' or password == '': 
      error = u'All fields should be filled' 
      return render(request, 'login.html', {'error': error}) 

     try: 
      sql = "SELECT * FROM users_users WHERE userMail=usermail" 
      user = str(Users.objects.raw(sql)[0]) 
      userInfo = user.split(',') 
      if userInfo[2] = password: 
       return render(request, 'login.html', {'error': userInfo}, context_instance=RequestContext(request)) 
      else: 
       error = u'Email or password is not valid' 
       return render(request, 'login.html', {'error': error}, context_instance=RequestContext(request)) 
     except: 
      error = u'User with an email %s does not exist' %usermail 
      return render(request, 'login.html', {'error': error}, context_instance=RequestContext(request)) 

    return render(request, 'login.html', context_instance=RequestContext(request)) 

데이터베이스의 암호와 사용자가 제공 한 암호를 비교하려고하면 문제가 발생합니다. 뷰에 대한

모델 :

class Users(models.Model): 
    """ 
    This class is used for user authorization 
    """ 

    userName = models.CharField(max_length=50, unique=True) 
    userMail = models.CharField(max_length=50, unique=True) 
    userPass = models.CharField(max_length=32) 
    userRole = models.CharField(max_length=12, default='user') 

    def __unicode__(self): 
     # return self.userPass 
     return u'%s, %s, %s, %s' % (self.userName, self.userMail, self.userPass, self.userRole) 
+0

어떤 문제가 발생합니까? – dbf

+1

리틀 바비 테이블. 그게 어떻게됩니까 :) –

+0

나는 파이썬과 장고에 익숙하지 않지만 프로그래밍에 전혀 익숙하지 않기 때문에 여기서는 보안을 조작하지 않고 데이터베이스에서 패스를 얻고 싶다. –

답변

7

하지 않습니다. Django는 보안 취약점에 대해 수년간 테스트 된 인증 시스템을 유지하면서 replacing the User model에 대해 완벽하게 잘 문서화 된 시스템을 보유하고 있습니다. 당신의 모든 것이 안전하지 않으므로 그렇게하려고해서는 안됩니다.

+0

오케이, 고마워, 내가 그럴거야. –

3

이 바퀴를 다시 발명해서는 안됩니다. 자신의 사용자 클래스로 자신 만의 로그인 시스템을 만드는 대신 customize the current User model을 사용해야 필드 및 검증 방법을 추가 할 수 있습니다.

자신 만의 시스템을 만들면 응용 프로그램에 보안 구멍을 만들 수 있으며 장고의 강력한 기능 중 하나 인 사용자 관리와 관리자 자동 생성 기능이 손실됩니다!

+1

장고는 소년인가? :) – Jannis

+0

감사합니다, 나는 시도 할 것이다. –

+0

@ 제이 : 예, 제가 원한 아들 : D –

관련 문제