-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 には、認証システムを維持しながらUser モデルを置き換えるための完全に優れた完全に文書化されたシステムがあります。これは、セキュリティの脆弱性について数年間テストされています。あなたのものはまったく安全ではないので、やろうとすべきではありません。

于 2013-08-25T20:30:40.173 に答える
3

車輪を再発明するべきではありません。独自のユーザー クラスを使用して独自のログイン システムを作成する代わりに、フィールドと検証メソッドを追加できる現在のユーザー モデルをカスタマイズする必要があります。

独自のシステムを作成すると、アプリケーションにセキュリティ ホールができてしまい、Django の機能の 1 つ (ユーザー管理と管理者の自動生成) を失うことになります!

于 2013-08-25T21:58:07.727 に答える