2013-05-16 1 views
0

django_openid_auth (https://launchpad.net/django-openid-auth)를 사용하기 시작했으며 정상적으로 작동합니다.django : 기존 신호에 연결하지 못했습니다.

openid 공급자에 연결하여 사용자 인증을 관리합니다.

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_open_auth.views.login_complete이 블록이 있다는 것입니다.

내가 장고 - 오픈 ID-인증의 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 신호 스레드를 확인하고 그들 중 하나는 가져 오기가 정확히 동일해야합니다 그렇지 않으면 연결이 나타나지 않는다고 말했다.

하지만 어떻게 이것을 디버깅 할 수 있습니까? 문제가있는 곳 - 연결이 잘못된 장소에 놓이거나 다른 곳에 문제가있어 연결이 끊어지지 않습니까? 이걸 어떻게 찾을 수 있습니까?

앨런

편집 : 나는 한 번에 제안 된 모든 노력을하고 내가 작업을 얻었다. 나는 신호를 별도의 파일에 넣고 올바른 위치에 가져오고 karthikr (https://stackoverflow.com/users/1628832/karthikr)의 조언을 따랐습니다. 또한 로거가 올바른 로깅 conf를 사용하지 않아 모든 것이 이전에 작동했을 수 있으므로 로깅이 작동하지 않는다는 것을 알게되었습니다.

그래 : 예. 당신이 기분이 좋지 않을 때 작동하지 않아야합니다 :). 도움을 주셔서 감사합니다.

+1

변경 'openid_login_complete.connect (update_request)'를'openid_login_complete.connect (update_request, instance)'로 설정합니다. 이것은 송신자 인스턴스를 기다리고 있습니다. – karthikr

+0

미안하지만 이해가 잘 안되네. 'openid_login_complete' 신호를 구독하고 싶니? –

+0

예, 그 신호가 상승한 후에 물건을 보내고 싶습니다 (보낸 사람, 방아쇠를 당긴 사람). –

답변

0

여기서 신호 콜백을 코딩하고 있습니까? 신호가 전송되기 전에 콜백을 등록하는 모듈을 가져오고 있습니까?

예를 들어 신호를 사용하고 my_app/signals.py에 코드를 입력했습니다. 나중에, 나는 my_app/models.py에 가서 줄을 추가 :

이 코드가 살아야 : 당신이 당신의 콜백 must be imported before the signals raises 쓰기

import my_app.signals 

파일을? 원하는 곳 어디에서나 신호 처리 및 등록 코드를 입력 할 수 있습니다. 그러나 신호가 보내지기 전에 신호 처리가 등록되도록 모듈이 일찍 가져 오기되었는지 확인해야합니다. 이렇게하면 앱의 models.py가 시그널 핸들러의 등록을하기에 적합합니다.

또한 @register 데코레이터로 등록 할 수 있습니다. 거의 동일하지만 다른 방식으로 작동하는지 확인할 수 있습니다.

희망이 있습니다.

+0

나는 데코레이터로 그것을 시도했지만, 역시 작동하지 않았다. –

+0

하지만 시그널이 나오기 전에 콜백 beeing을 가져 오는 것에 대해서는 ... 어떻게해야할까요? –

+0

당신의 신호 콜백이 정의 된 파일과 당신은 그것을 어디서 가져 옵니까? –

관련 문제