使用@login_required装饰器进行django注册/登录视图

时间:2015-02-10 15:20:42

标签: python django login

我正在尝试为用户创建一个单独的注册视图,但由于我在我的'配置文件中使用了@login_required装饰器,因此它无法正常工作。 view,登录后应该重定向到。目前login_user视图正常工作。

问题:如何在' profile'上使用@login_required装饰器时注册用户?查看?

我的代码对于登录和注册视图看起来像这样:

def login_user(request):
  message = None
  if request.method == 'POST':
    if 'login' in request.POST:
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = authenticate(username=form.cleaned_data['email'], password=form.cleaned_data['password'])
            if not user:
                message = "Invalid email or password!"
            else:
                login(request, user)
                return redirect('profile')
  return render(request, 'users/login.html', {'message': message})


def register_user(request):
  message = None
  if request.method == 'POST':
    user_form = RegistrationForm(data=request.POST)
    if user_form.is_valid():
        user_form.save()
        user = authenticate(username=user_form.cleaned_data['email'],
                            password=user_form.cleaned_data['password1'])
        if user:
            login(request, user)
            return redirect('profile')
    else:
        message = "Email already exists or passwords do not match"
  return render(request, 'users/register.html', {'message': message})

为了让我的注册页面绕过@login_required装饰器,我使用了登录(请求,用户)方法,但这似乎并没有起作用。

1 个答案:

答案 0 :(得分:0)

您必须提到后端作为登录功能的第三个参数。 因此,在您的register_user函数中:

if user:
    # specify the backend as the third argument
    login(request, user, backend='django.contrib.auth.backends.ModelBackend')
    return redirect('profile')