簡體   English   中英

使用@login_required裝飾器進行django注冊/登錄視圖

[英]django registration/login views using @login_required decorator

我正在嘗試為用戶創建一個單獨的注冊視圖,但它不起作用,因為我在我的'profile'視圖上使用@login_required裝飾器,應該在登錄后重定向到。目前login_user視圖工作正常。

問題:如何在“個人資料”視圖中使用@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裝飾器,我使用了登錄(請求,用戶)方法,但這似乎不起作用。

你必須提到后端作為登錄功能的第三個參數。 所以在你的register_user函數中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM