-6

我是 Django 和 Python 的新手。我阅读了文档并且标准登录系统对我来说看起来并不好,因为我想使用电子邮件和密码进行用户登录。

因此,我创建了一个带有视图和模型的新应用程序。

这是我的登录功能。

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)
4

2 回答 2

7

不要这样做。Django 有一个非常好的和完整的文档系统,用于替换用户模型,同时保留身份验证系统,该系统已经过数年的安全漏洞测试。你的根本不安全,你不应该尝试这样做。

于 2013-08-25T20:30:40.173 回答
3

不应该重新发明轮子。与其使用自己的用户类制作自己的登录系统,不如自定义当前的用户模型,该模型允许添加字段和验证方法。

通过创建您自己的系统,您可以在您的应用程序中制造安全漏洞,并且您正在失去 Django 的力量之一:它的用户管理和自动生成的管理!

于 2013-08-25T21:58:07.727 回答