2015-07-23 6 views
3
AttributeError at /complete/google-oauth2/ 

'NoneType' object has no attribute 'provider' 

Это происходит с новым или уже зарегистрированного пользователя на этой линии https://github.com/omab/python-social-auth/blob/master/social/actions.py#L69 и новая проблема. Он появился, когда я играл с настраиваемым конвейером, но он работал до этого, теперь возврат к самому базовому набору python-social-auth не работает.Использование Python-социально-аутентификации социально-пользователь не установлен в трубопроводе

Даже с перезагруженной базой данных и обновленной синхронизацией. (Это Django 1.4.20, старый проект, который мы обновляем).

Проблема очевидна, везде, где в конвейере по умолчанию социальный пользователь должен быть настроен на пользователя, не работает, но я недостаточно хорошо понимаю код python-social-auth и перемещаюсь по кругу Вот. Любые указатели или помощь были бы высоко оценены здесь.

500, который появляется в моем стеке в случае, если это поможет.

[23/Jul/2015 12:00:32] "GET /complete/google-oauth2/?state=MRFnOQG6Cv5Cmb1xqdcp53C33dDrFf7C&code=4/2bgjgYgxFtqB2c10BInigkigGfy4ZNOSYBqyHBUdLGo&authuser=0&prompt=consent&session_state=4c6c24bdd3100a506c4744be8ab9b793ed6399d5..a5f9 HTTP/1.1" 500 148571 

Это данные о том, что код давится, это, очевидно, потому, что некоторые предыдущие части трубопровода не ставят «social_user» в пользователь. Но я не знаю, где это было бы не так, кто-то, кто знаком с этим, имеет какие-либо предложения, по которым может произойти сбой по умолчанию?

partial None 
is_authenticated False 
args () 
is_new False 
redirect_value '' 
user <User: 4o5bb5o5> 
social_user None 
kwargs {} 
login <function _do_login at 0xaef3de9c> 
backend <social.backends.google.GoogleOAuth2 object at 0x9e68fac> 
data <QueryDict: {u'state': [u'dwMOHkBxsVgvj4mwL54LXqihzJVYMWTV'], u'code': [u'4/fjOVlVyAK5mS_mcv7uHVWQsFycpjlbB_YOy4F7omIIY'], u'prompt': [u'none'], u'session_state': [u'ab65081ee8e4a3720d5963deced4cabc7b259a85..8f10'], u'authuser': [u'0']}> 
redirect_name 
'next' 

Когда я перехожу к главной странице, я вхожу в систему с учетной записью gmail. (Хотя некоторые из функций post_save, которые должны произойти после create_user, не срабатывают, но я предполагаю, что это связано с тем, что он разбился в середине конвейера). Затем, когда я выхожу из системы и снова включаюсь, он снова падает на той же странице.

ответ

0

Я получил его работу, комментируя строки 68 и 69 из actions.py, которые вызывают проблему. Я знаю, что это не решение, но если вам нужно его работать, это может быть своего рода обходным способом.

1

Может быть, слишком поздно, но это поможет другим. Я использовал это в своем обычном приложении.

Как показано here, ID_KEY установлен None И here я видел с PDB ID_KEY установлен id. Естественно, эта структура ожидает id как один из ключей ответа от сервера во время user_data.

Это мой обычай бэкенд выглядит,

class CustomOAuth2(BaseOAuth2): 
    """Custom OAuth authentication backend""" 
    name = 'Custom' 
    ID_KEY = 'email' #<===== SET THIS TO UNIQUE ATTRIBUTE IF ID IS NOT RETURNED 
    AUTHORIZATION_URL = 'https://auth.Custom.org/oauth2/authorize' 
    ACCESS_TOKEN_URL = 'https://auth.Custom.org/oauth2/token' 
    ACCESS_TOKEN_METHOD = 'POST' 
    REVOKE_TOKEN_URL = '= https://auth.Custom.org/oauth2/revoke' 
    REVOKE_TOKEN_METHOD = 'POST' 
    USER_DATA_URL = "https://api.Custom.org/user/" 
    SCOPE_SEPARATOR = ',' 

    def get_user_details(self, response): 
     """Return user details from Custom account""" 
     return {'username': response.get('login'), 
       'email': response.get('email') or '', 
       'first_name': response.get('name')} 

    def user_data(self, access_token, *args, **kwargs): 
     """Loads user data from service""" 
     try: 
      headers = {'Authorization': 'Bearer %s' %access_token} 
      headers['Accept'] = 'application/json' 
      response = requests.get(self.USER_DATA_URL, headers=headers) 
      d = json.loads(response.content) 
      return d 
     except ValueError: 
      return None 
Смежные вопросы