【问题标题】:django-axes modelbackend requires 'request' to authenticatedjango-axes modelbackend 需要“请求”进行身份验证
【发布时间】:2018-12-05 10:30:50
【问题描述】:

在我的应用程序中,我有一个使用 django-custom-user 的自定义用户模型,我也在使用 allauth。 Django-axes 会在 admin 和 allauth 上注册每次登录尝试,但我在用户登录时遇到问题。

登录视图:

def user_login(request):
    data = dict()

    if request.user.is_authenticated:
        return redirect('frontend:dashboard')

    if request.method == "POST":
        form = LoginForm(request.POST)
        if form.is_valid():
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            if user is not None:
                user = authenticate(email=email, password=password)
                if user.is_active:
                    login(request, user)
                    user_logged_in.send(sender=CustomUser, request=request, user=user)
                    return redirect('frontend:dashboard')
                else:
                    messages.error(request, _('Incorrect email or password.'))
                    user_login_failed.send(sender=CustomUser, request=request, credentials={'username': form.cleaned_data.get('email')})
            else:
                messages.error(request, _('Incorrect email or password.'))
                user_login_failed.send(sender=CustomUser, request=request, credentials={'username': form.cleaned_data.get('email')})
            return redirect('auth:login')
    else:
        form = LoginForm()
    data['form'] = form
    return render(request, os.path.join(settings.AUTH_TEMPLATE, 'login.html'), data)

当我尝试登录时出现此错误:

axes.backends.AxesModelBackend.RequestParameterRequired: DjangoAxesModelBackend requires calls to authenticate to pass `request`

django 轴文档有点混乱,我不明白在解决这个问题时我必须做什么。

我不得不提到这个错误只有在我将axes.backends.AxesModelBackend 添加到AUTHENTICATION_BACKENDS 时才会出现,这是强制性的。

【问题讨论】:

    标签: django security django-models django-views django-login


    【解决方案1】:

    对我来说:

    form = AuthenticationForm(data=request.POST, request=request)   
    user = authenticate(username=username, password=password, request=request)
    

    并进一步使用登录视图的装饰器

    from axes.decorators import axes_dispatch
    @axes_dispatch
    

    是解决方案。也许它也能帮助你!

    最好的问候

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2014-12-20
      • 2015-06-02
      • 1970-01-01
      • 2017-05-17
      相关资源
      最近更新 更多