From 1fc098b0934c73c1e358fc4d1f2dd3dee1c756c2 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Fri, 9 Oct 2015 16:59:49 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=BC=BA=E5=88=B6=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E9=AA=8C=E8=AF=81=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- account/models.py | 2 -- account/views.py | 42 +++++---------------------- static/src/js/app/oj/account/login.js | 30 ++----------------- template/src/oj/account/login.html | 8 ++++- 4 files changed, 17 insertions(+), 65 deletions(-) diff --git a/account/models.py b/account/models.py index f7392dfb..ee0cf188 100644 --- a/account/models.py +++ b/account/models.py @@ -38,8 +38,6 @@ class User(AbstractBaseUser): reset_password_token = models.CharField(max_length=40, blank=True, null=True) # token 生成时间 reset_password_token_create_time = models.DateTimeField(blank=True, null=True) - # user 登陆失败的次数计数器。每次密码错误就增加3,而登陆成功一次减去1,在这个计时器大于0的时候,需要输入验证码 - login_failed_counter = models.IntegerField(default=0) USERNAME_FIELD = 'username' REQUIRED_FIELDS = [] diff --git a/account/views.py b/account/views.py index 53076757..1550ff7e 100644 --- a/account/views.py +++ b/account/views.py @@ -33,30 +33,19 @@ class UserLoginAPIView(APIView): serializer = UserLoginSerializer(data=request.data) if serializer.is_valid(): data = serializer.data + + if "captcha" not in data: + return error_response(u"请填写验证码!") + captcha = Captcha(request) + if not captcha.check(data["captcha"]): + return error_response(u"验证码错误") + user = auth.authenticate(username=data["username"], password=data["password"]) # 用户名或密码错误的话 返回None if user: - # 管理员必须使用验证码 多次错误的使用验证码 - if user.admin_type > 0 or user.login_failed_counter: - if "captcha" not in data: - return error_response(u"请填写验证码!") - captcha = Captcha(request) - if not captcha.check(data["captcha"]): - return error_response(u"验证码错误") auth.login(request, user) - # 登陆成功,计数器减去1 - if user.login_failed_counter > 0: - user.login_failed_counter -= 1 - user.save() return success_response(u"登录成功") else: - # 登陆失败,计数器加3 - try: - user = User.objects.get(username=data["username"]) - user.login_failed_counter += 3 - user.save() - except User.DoesNotExist: - pass return error_response(u"用户名或密码错误") else: return serializer_invalid_response(serializer) @@ -234,23 +223,6 @@ class UserInfoAPIView(APIView): return success_response(UserSerializer(request.user).data) -class AccountSecurityAPIView(APIView): - def get(self, request): - """ - 判断用户登录是否需要验证码 - --- - """ - username = request.GET.get("username", None) - if username: - try: - user = User.objects.get(username=username) - except User.DoesNotExist: - return success_response({"applied_captcha": True}) - if user.admin_type > 0 or user.login_failed_counter > 0: - return success_response({"applied_captcha": True}) - return success_response({"applied_captcha": False}) - - class ApplyResetPasswordAPIView(APIView): def post(self, request): """ diff --git a/static/src/js/app/oj/account/login.js b/static/src/js/app/oj/account/login.js index 8baf0182..f36f1169 100644 --- a/static/src/js/app/oj/account/login.js +++ b/static/src/js/app/oj/account/login.js @@ -4,14 +4,12 @@ require(["jquery", "bsAlert", "csrfToken", "validator"], function ($, bsAlert, c if (!e.isDefaultPrevented()) { var username = $("#username").val(); var password = $("#password").val(); - var ajaxData = {username: username, password: password}; - if (applied_captcha) { - ajaxData.captcha = $("#captcha").val(); - } + var captcha = $("#captcha").val(); + $.ajax({ beforeSend: csrfTokenHeader, url: "/api/login/", - data: ajaxData, + data: {username: username, password: password, captcha: captcha}, dataType: "json", method: "post", success: function (data) { @@ -47,28 +45,6 @@ require(["jquery", "bsAlert", "csrfToken", "validator"], function ($, bsAlert, c return false; } }); - - $('#username').blur(function () { - if ($("#username").val()) { - $.ajax({ - beforeSend: csrfTokenHeader, - url: "/api/account_security_check/?username=" + $("#username").val(), - method: "get", - success: function (data) { - if (!data.code) { - if (data.data.applied_captcha) { - $('#captcha-area').html('  

'); - applied_captcha = true; - } - else { - $('#captcha-area').html(''); - applied_captcha = false; - } - } - } - }); - } - }); function refresh_captcha(){ $("#captcha-img")[0].src = "/captcha/?" + Math.random(); $("#captcha")[0].value = ""; diff --git a/template/src/oj/account/login.html b/template/src/oj/account/login.html index f92142be..adc5ca9a 100644 --- a/template/src/oj/account/login.html +++ b/template/src/oj/account/login.html @@ -22,7 +22,13 @@
-
+
+    +

+ +
+