2017-05-28 47 views
1

我使用django-allauth == 0.32.0進行用戶身份驗證,它在我手動執行(註冊/登錄/註銷/等)時起作用。登錄硒測試Django的所有身份驗證失敗

我的models.py:

class Profile(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 

signals.py:

@receiver(post_save, sender=User) 
def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     Profile.objects.create(user=instance) 

@receiver(post_save, sender=User) 
def save_user_profile(sender, instance, **kwargs): 
    instance.profile.save() 

我views.py:

@login_required(login_url='/accounts/login/') 
def CategoryView(request): 
    context = { 
     'data': 'data', 
    } 
    return render(request, 'myapp/index.html',context) 

現在,我想寫硒StaticLiveServerTestCase測試因爲它:

def test_login(self): 
     uname = "Herbert" 
     pw = "klaus1234" 
     User.objects.create(username=uname,password=pw) 
     login_page = "/accounts/login" 
     self.selenium.get('%s%s' % (self.live_server_url, login_page)) 
     self.selenium.maximize_window() 
     self.selenium.find_element_by_id("id_login").send_keys(uname) 
     self.selenium.find_element_by_id("id_password").send_keys(pw) 
     self.selenium.find_elements_by_tag_name("button")[0].click() 

當我運行它時,它看起來像我正確的數據被張貼到輸入字段中,當我手動執行時,它的確如此。但我得到的是這樣的:

「您指定的用戶名和/或密碼不正確。」

和頁面不重定向到LOGIN_REDIRECT_URL

指定的頁面要驗證我張貼的數據是我添加這些行不拋出糾錯:

self.assertEqual(1,len(Profile.objects.all())) 
self.assertEqual(uname,Profile.objects.all()[0].user.username) 
self.assertEqual(pw,Profile.objects.all()[0].user.password) 
self.assertEqual(uname,User.objects.all()[0].username) 
self.assertEqual(pw,User.objects.all()[0].password)   

我在這裏錯過了什麼?

+0

將大量日誌語句添加到您的登錄視圖中,以便您可以看到它所做的所有決定以及它收到的所有值。這應該指向你正確的方向。 (另外,你的'User'模型真的存儲明文密碼嗎?) –

+0

這是另一回事,當我檢查'./manage.py shell'時,所有的密碼都是散列的,但是當我在測試過程中將它們打印出來時,它們以某種方式以純文本形式出現 – Tom

回答

0

這是相當古老的帖子,但我認爲這裏的問題是如何完成用戶創建。

當前您正在使用以下方式創建用戶。

User.objects.create(username=uname,password=pw)

對於其他任何物體,這將是一個偉大的選擇,但用戶應該如下創建:

User.objects.create_user(username=uname,password=pw)

這正是爲什麼你看到該密碼未-encrypted(純文本)。