0

我开始使用 django_openid_auth ( https://launchpad.net/django-openid-auth ),它工作得很好。

我设法连接到我的 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-auth OpenIDBackend 类的 OpenIdBackend 子类,并将其放入自己项目的 core.authentication.openidbackend

在该文件中有: from django_openid_auth.signals import openid_login_complete

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

openid_login_complete.connect(update_request)

但是该调试行永远不会出现在日志中。

那我做错了什么?我检查了其他一些django信号线程,其中一个说导入必须完全相同,否则不会出现连接。

但我怎么能调试呢?问题出在哪里 - 连接是否永远不会发生,因为我将连接放置在错误的位置或者是其他地方的问题?我怎样才能找到这个?

艾伦

编辑:我尝试了一次建议的所有内容,并且我得到了它的工作。我将信号放入单独的文件中,将其导入正确的位置,并遵循 karthikr ( https://stackoverflow.com/users/1628832/karthikr ) 给出的建议。我还注意到我的记录器没有使用正确的日志记录配置,所以一切可能都在早些时候工作,只是日志记录不起作用。

是的 :)。当你感觉不舒服时不应该工作:)。谢谢你们的帮助。

4

1 回答 1

0

你在哪里编码那个信号回调?您是否在发送信号之前导入了注册回调的模块?

例如,我使用了信号并将 in 编码my_app/signals.py。后来,我去my_app/models.py添加这一行:

import my_app.signals

必须在信号引发之前导入您编写回调的文件:

这段代码应该放在哪里?您可以将信号处理和注册代码放在您喜欢的任何地方。但是,您需要确保尽早导入它所在的模块,以便在需要发送任何信号之前注册信号处理。这使您的应用程序的 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')

希望有帮助!

于 2013-05-16T16:39:11.040 回答