2

我使用django-allauth主要作爲爲管理後端創建用戶帳戶的方式。我想要發生的事情是:django-allauth:如何將用戶設置爲僅在電子郵件驗證後激活

1)當用戶完成註冊過程時,發送驗證電子郵件(我目前有這個工作),並將用戶設置爲非活動,員工和將「SurveyManager」組通過僞造分配給它們。目前,用戶被創建時激活集爲真,員工設置爲false,並且沒有分配組。

2)點擊電子郵件中的鏈接驗證他們的地址後,我希望用戶被設置爲活動狀態,以便他們可以通過管理後臺登錄。

我的具體問題是,我不知道:1)如何或在哪裏設置用戶的活動,工作人員和組的缺省值 - 我想這將在models.py文件中完成,但我的理解是用戶模型包含在auth應用程序中; 2)一旦電子郵件驗證完成,如何觸發代碼將用戶活動標誌更改爲真。

在此先感謝 - 對不起,如果這是一個糟糕的創建帖子,這是我的第一!

+0

你還沒有真正描述過你在嘗試產生這些結果時遇到過什麼_specific programming_問題。 – csmckelvey

+0

對不起 - 我的具體問題是我不知道:1)如何或在哪裏設置用戶的活動,工作人員和組的默認值 - 我想這將在models.py文件中完成,但我的理解是,用戶模型包含在身份驗證應用程序中。 2)一旦電子郵件驗證完成,如何觸發代碼將用戶活動標誌更改爲真。 –

回答

7

我似乎有(主要)通過使用信號解決了我的問題。 This post給了我這個想法(但不幸沒有提供任何代碼示例),而this site給了我一些實際的具體示例來修改(我發現這是Django世界中罕見的商品)。

最後我把下面的代碼在我的網頁view.py文件 - 我知道models.py推薦用於信號,但問題正在使用的模型實際上是從allauth包:

from allauth.account.signals import user_signed_up, email_confirmed 
from django.dispatch import receiver 
from django.contrib.auth.models import Group 
from django.contrib.auth.models import User 
from allauth.account.models import EmailAddress 

@receiver(user_signed_up) 
def user_signed_up_(request, user, **kwargs): 

    user.is_active = False 
    user.is_staff = True 
    Group.objects.get(name='SurveyManager').user_set.add(user) 

    user.save() 

@receiver(email_confirmed) 
def email_confirmed_(request, email_address, **kwargs): 

    new_email_address = EmailAddress.objects.get(email=email_address) 
    user = User.objects.get(new_email_address.user) 
    user.is_active = True 

    user.save() 

唯一不能正常工作的是email_confirmed信號處理 - 它聲稱「EmailAddress匹配查詢不存在」,當它在數據庫條目中明顯匹配時,但我會繼續並在a separate question

+0

嘿,這是我正在嘗試使用類似的代碼來設置用戶爲活動。但是,就我而言,用戶狀態未被設置爲活動狀態。它基本上沒有變化。這是常見的還是我做錯了什麼?讓我知道你是否特別需要這些代碼。 –

+0

@DivijSehgal我建議你在另一個問題中發佈你的代碼並將其鏈接到這裏。我會看看我能否在那裏回答。 –

+0

跛腳的問題是,我錯誤地設置了pre_save信號,以確保我始終將用戶保存爲非活動狀態。現在將其轉換爲業務邏輯。謝謝,雖然:) –

1

ACCOUNT_EMAIL_VERIFICATION(=「可選」) 確定註冊過程中的電子郵件驗證方法 - 選擇「必需」,「可選」或「無」之一。當設置爲「強制」時,用戶被阻止登錄,直到電子郵件地址被驗證。選擇「可選」或「無」以允許使用未經驗證的電子郵件地址登錄。在「可選」的情況下,電子郵件驗證郵件仍然被髮送,而如果是「無」,則不發送電子郵件驗證郵件。

+0

我把它設置爲強制性的,那部分工作正常。不幸的是,這似乎並不影響數據庫中用戶條目中的「活動」屬性。你說的話會適用,如果我使用allauth登錄,但我實際上繞過了我的網站,並使用管理面板登錄,這似乎並不在乎,如果地址是驗證與否。如果'active'屬性設置爲false,管理面板_does_會關心,這就是爲什麼我想在地址驗證時將其設置爲true(並且在初始創建用戶時默認爲false)。 –

0

我知道這是一箇舊帖子,但我在我自己的搜索中發現了這個帖子。回覆您的email_confirmed問題,在您的EmailAddress實例調用中使用email = kwargs ['email_address']。email。

@receiver(email_confirmed) 
def email_confirmed_(request, *args, **kwargs): 
    user = request.user 
    new_email_address = EmailAddress.objects.get(
     email=kwargs['email_address'].email) 
    user = User.objects.get(
     email=new_email_address.user) 
    user.is_active = True 
    user.save() 
相關問題