2013-05-16 106 views
0

我開始使用django_openid_auth(https://launchpad.net/django-openid-auth),它工作得很好。django:連接到現有信號失敗

我設法連接到我的openid提供程序並獲得用戶身份驗證。事情是,在django_open_auth.views.login_complete有此塊:

if user is not None: 
    if user.is_active: 
     auth_login(request, user) 
     response = HttpResponseRedirect(sanitise_redirect_url(redirect_to)) 

     # Notify any listeners that we successfully logged in. 
     openid_login_complete.send(sender=UserOpenID, request=request, 
      openid_response=openid_response) 

     return response 
    else: 
     return render_failure(request, 'Disabled account') 

通知的#notify評論。

我創建Django的OpenID的身份驗證OpenIDBackend類的我自己OpenIdBackend子類,並把它放到我自己的項目

的core.authentication.openidbackend在該文件中有: 從django_openid_auth.signals導入openid_login_complete

def update_request(sender, **kwargs): 
    logger.debug('test') 

openid_login_complete.connect(update_request) 

但是,該調試行從不出現在日誌中。

那麼我做錯了什麼?我檢查了一些其他django信號線程,其中一個表示導入必須完全相同,否則連接不會出現。

但我怎麼能調試呢?問題在哪裏 - 連接是否永遠不會發生,因爲我把連接插入錯誤的地方或者是其他地方的問題?我怎麼能找到這個?

Alan

編輯:我嘗試了一次建議,我得到它的工作。我將信號放入單獨的文件中,將其導入到正確的位置,並遵循karthikr(https://stackoverflow.com/users/1628832/karthikr)給出的建議。我還注意到,我的記錄器沒有使用正確的日誌記錄conf,所以一切都可能在早些時候工作,只是記錄不起作用。

所以耶:)。當你感覺不舒服時不應該工作:)。謝謝你們的幫助。

+1

更改'openid_login_complete。連接(update_request)'到'openid_login_complete.connect(update_request,instance)'它期待一個發送者實例。 – karthikr

+0

對不起,但我不太明白,你想訂閱'openid_login_complete'信號嗎? –

+0

是的,我想在信號上升(發送,觸發,無論)之後做些什麼。 –

回答

0

你在哪裏編碼信號回調?您是否在導入信號發送之前註冊回調的模塊?

例如,我已使用信號並在my_app/signals.py中編碼。後來,我去my_app/models.py並添加行:

應該在哪裏驗證碼生活:

import my_app.signals 

你寫你的回調must be imported before the signals raises文件? 您可以將信號處理和註冊碼放在任何你喜歡的地方。但是,您需要確保它所在的模塊能夠儘早導入,以便在需要發送任何信號之前對信號進行處理。這使您的應用程序的models.py成爲註冊信號處理程序的好地方。

您還可以嘗試註冊@register裝飾工。這是幾乎相同,但你可以嘗試看看它是否以另一種方式工作:

from django_openid_auth.signals import openid_login_complete 
from django.dispatch import receiver 

@receiver(openid_login_complete) 
def update_request(sender, **kwargs): 
    logger.debug('test') 

希望幫助!

+0

我曾嘗試用裝飾器,但它也沒有工作。 –

+0

但是在信號引發之前導入了回調函數的問題......我如何確保這種情況發生? –

+0

你的信號回調是在什麼文件中定義的,你在哪裏導入它? –