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('