Может ли `authenticate` использовать это в django? - PullRequest
0 голосов
/ 18 декабря 2010

это код:

def openid_done(request, provider=None):
    """
    When the request reaches here, the user has completed the Openid
    authentication flow. He has authorised us to login via Openid, so
    request.openid is populated.
    After coming here, we want to check if we are seeing this openid first time.
    If we are, we will create a new Django user for this Openid, else login the
    existing openid.
    """

    if not provider:
        provider = request.session.get('openid_provider', '')
    if hasattr(request,'openid') and request.openid:
        #check for already existing associations
        openid_key = str(request.openid)

        #authenticate and login
        try:
            user = authenticate(openid_key=openid_key, request=request, provider = provider)
        except:
            user = None

        if user:
            login(request, user)
            if 'openid_next' in request.session :
                openid_next = request.session.get('openid_next')
                if len(openid_next.strip()) >  0 :
                    return HttpResponseRedirect(openid_next)
            return HttpResponseRedirect(LOGIN_REDIRECT_URL)
            # redirect_url = reverse('socialauth_editprofile')
            # return HttpResponseRedirect(redirect_url)
        else:
            return HttpResponseRedirect(LOGIN_URL)
    else:
        return HttpResponseRedirect(LOGIN_URL)

и используйте код так:

authenticate(openid_key=openid_key, request=request, provider = provider)

Это правильно?

Я думаю, что код должен быть таким:

user = authenticate(username='john', password='secret')

Аутентифицируется ли аргумент openid_key, provider?

Должен ли я переписать authenticate сам, чтобы справиться с этим.

спасибо

1 Ответ

0 голосов
/ 18 декабря 2010

Нет, у django нет функции authenticate, которая ожидает openid_key, provider аргументов.

grep -r "openid" django ничего не возвращает для версии 1.2.3

Чем вы являетесьРассмотрим пользовательский бэкэнд аутентификации, подобный тому, который можно найти здесь на github: https://github.com/agiliq/Django-Socialauth/blob/master/socialauth/auth_backends.py

 class OpenIdBackend:
    def authenticate(self, openid_key, request, provider, user=None):
        try:
            assoc = UserAssociation.objects.get(openid_key=openid_key)
            return assoc.user
        #.... 

В следующий раз, когда вы заметите, что функция не используется нормально, вы должны начать задаваться вопросом, является ли она дажетот самый, о котором вы думаете:)

Вы должны взглянуть на , откуда была импортирована функция authenticate, и вы увидите, что это не код проекта django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...