Exemplo n.º 1
0
 def write_login_log(self, data):
     """ 写入登录历史 """
     login_ip = get_login_ip(self.request)
     user_agent = self.request.META.get('HTTP_USER_AGENT', '')
     tmp_data = {'ip': login_ip, 'type': 'W', 'user_agent': user_agent}
     data.update(tmp_data)
     write_login_log_async.delay(**data)
Exemplo n.º 2
0
 def get_form_class(self):
     """ 获取表单类,查看缓存是否有需要使用验证码的key """
     ip = get_login_ip(self.request)
     if cache.get(self.key_prefix_captcha.format(ip)):
         return self.form_class_captcha
     else:
         return self.form_class
Exemplo n.º 3
0
def cookie_check(request):
    """
    Get user info by cookie.
    If cookie or user_info is None, redirect to login page.
    :param request:
    :return:
    """
    print('*' * 40 + 'Cookie check' + '*' * 40)
    _cookie = request.COOKIES.get(settings.LOPS_AUTH_COOKIE)
    if _cookie:
        if not request.user.is_authenticated:
            _, user_info = auth(_cookie)
            if user_info:
                user = authenticate(request, **user_info)
                print("User authenticate: %s" % user)
                login(request, user)

                # write login log
                login_ip = get_login_ip(request)
                user_agent = request.META.get('HTTP_USER_AGENT', '')
                write_login_log_async.delay(
                    username=user.username, type='W',
                    ip=login_ip, user_agent=user_agent
                )

            else:
                print('Can not get user info by ticket: %s' % _cookie)
                return False
        print('User login...')
        return True
Exemplo n.º 4
0
 def form_invalid(self, form):
     ip = get_login_ip(self.request)
     cache.set(self.key_prefix.format(ip), 1, 3600)
     old_form = form
     form = self.form_class_captcha(data=form.data)
     form._errors = old_form.errors
     return super().form_invalid(form)
Exemplo n.º 5
0
 def post(self, request, *args, **kwargs):
     """ post请求,进行登录验证 """
     ip = get_login_ip(request)
     username = self.request.POST.get('username')
     key_limit = self.key_prefix_limit.format(username, ip)
     if is_block_login(key_limit):
         return self.render_to_response(
             self.get_context_data(block_login=True))
     return super().post(request, *args, **kwargs)
Exemplo n.º 6
0
 def get_context_data(self, **kwargs):
     captcha = False
     ip = get_login_ip(self.request)
     if cache.get(self.key_prefix_captcha.format(ip)):
         captcha = True
     context = {
         'demo_mode': os.environ.get("DEMO_MODE"),
         'block_login': False,  # 默认限制登录为False
         'captcha': captcha,
     }
     context.update(kwargs)
     return super().get_context_data(**context)
Exemplo n.º 7
0
    def form_invalid(self, form):
        """ 表单验证不通过 """
        username = form.cleaned_data.get('username')
        data = {'username': username, 'status': False}
        self.write_login_log(data)

        # limit user login failed count
        ip = get_login_ip(self.request)
        key_limit = self.key_prefix_limit.format(username, ip)
        key_block = self.key_prefix_block.format(username)
        set_user_login_failed_count_to_cache(key_limit, key_block)

        # 设置需要使用验证码的缓存key,然后切换表单为验证码表单
        cache.set(self.key_prefix_captcha.format(ip), 1, 3600)
        old_form = form
        form = self.form_class_captcha(data=form.data)
        form._errors = old_form.errors
        return super().form_invalid(form)
Exemplo n.º 8
0
 def get_form_class(self):
     ip = get_login_ip(self.request)
     if cache.get(self.key_prefix.format(ip)):
         return self.form_class_captcha
     else:
         return self.form_class