我的自定义登录安全吗?

时间:2018-06-26 13:49:55

标签: python django security

我创建了自己的自定义登录名,我没有使用django的登录名。

这是我的 models.py

class TipeUser(models.Model):
    tipe = models.CharField(max_length=30)
    detail = models.CharField(max_length=50, blank=True, null=True)
class User(models.Model):

    user = models.CharField(max_length=20)
    password = models.CharField(max_length=50)
    state = models.CharField(max_length=1)
    id_tipe_user = models.ForeignKey(TipeUser, on_delete=models.CASCADE)

我的 views.py

    def login(request):

        context={}  
        return render(request, 'login.html', context)

    def validate(request):
        if request.method=='POST':
            nameUser = request.POST.get('nameUser')
            passwordUser = request.POST.get('passwordUser')
            password = md5.new(passwordUser).hexdigest()
         try:
            userAdmin = User.objects.get(user=nameUser, password=password, id_tipe_user=1, state=1)
            request.session['nameUser'] = userAdmin.user
            return redirect('home')
         except User.DoesNotExist: 
             message= "User/Password wrong !!"
              context = {
                 'message': message,
              }
               return render(request, 'login.html', context)

    def home(request):

        if 'nameUser' not in request.session:

            return render(request, 'login.html', {})
        else:
           return render(request, 'myMenu.html', context)

def logout(request):

    if 'nameUser' in request.session:

        #delete session
        del request.session['nameUser']
        #redirect to login
        return redirect('login')


    else:
        return redirect('login')

我想再说一遍,这是一种好的做法吗?我在这里绝对安全,还是需要修改代码?

1 个答案:

答案 0 :(得分:10)

不,不是。

  • 在至少15年的时间里,一直没有将MD5哈希用于密码的做法。
  • 您不应将模型实例放到会话中,因为它们不会“处于活动状态”,即,如果数据库中的用户发生更改,则会话中的对象仍将具有旧数据。
  • 您假设存在一个TipeUser,其ID为1(无论如何)。
  • 您要查询带有整数state的{​​{1}} CharField。
  • 可能还有其他事情,但是我不会麻烦列举它们,因为–

坦率地说,您是在重新发明Django为会话和用户提供的完美轮子。你为什么做这个?如果您需要有关用户模型的其他数据,请there's support for that already