2013-09-07 3 views
0

Я настроен django social auth's принимать только от Google по электронной почте, но Google показывает этот экран оповещения пользователя приложения, что пол, дата рождения, картина, язык будет собирать:Джанго социальной аутентификации ограничение пользовательских данных

enter image description here

Мой Джанго-социально-аутентификации конфигурации выглядит следующим образом:

WHITE_LISTED_DOMAINS = [ 'some_domain', ] 
GOOGLE_WHITE_LISTED_DOMAINS = WHITE_LISTED_DOMAINS 
SOCIAL_AUTH_EXTRA_DATA = False  
#LOGIN_ERROR_URL = '/login-error/' Not set 
#SOCIAL_AUTH_DEFAULT_USERNAME = 'new_social_auth_user' Not set 
#GOOGLE_CONSUMER_KEY   = '' Not set 
#GOOGLE_CONSUMER_SECRET  = '' Not set 
#GOOGLE_OAUTH2_CLIENT_ID  = '' Not set 
#GOOGLE_OAUTH2_CLIENT_SECRET = '' Not set 
SOCIAL_AUTH_USERNAME_IS_FULL_EMAIL = False 
SOCIAL_AUTH_PROTECTED_USER_FIELDS = ['email',] 

INSTALLED_APPS = (
    'django.contrib.auth', 
    ... 
    'social_auth', 
) 

Как я могу сделать, чтобы избежать этого Google сообщение?

EDITED

У меня есть движение к GoogleOauth2 AUTH и наследовать и изменить Google бэкенд:

from social_auth.backends.google import * 

GOOGLE_OAUTH2_SCOPE = ['https://www.googleapis.com/auth/userinfo.email',] 

class GoogleOAuth2(BaseOAuth2): 
    """Google OAuth2 support""" 
    AUTH_BACKEND = GoogleOAuth2Backend 
    AUTHORIZATION_URL = 'https://accounts.google.com/o/oauth2/auth' 
    ACCESS_TOKEN_URL = 'https://accounts.google.com/o/oauth2/token' 
    REVOKE_TOKEN_URL = 'https://accounts.google.com/o/oauth2/revoke' 
    REVOKE_TOKEN_METHOD = 'GET' 
    SETTINGS_SECRET_NAME = 'GOOGLE_OAUTH2_CLIENT_SECRET' 
    SCOPE_VAR_NAME = 'GOOGLE_OAUTH_EXTRA_SCOPE' 
    DEFAULT_SCOPE = GOOGLE_OAUTH2_SCOPE 
    REDIRECT_STATE = False 

    print DEFAULT_SCOPE #<------ to be sure 

    def user_data(self, access_token, *args, **kwargs): 
     """Return user data from Google API""" 
     return googleapis_profile(GOOGLEAPIS_PROFILE, access_token) 

    @classmethod 
    def revoke_token_params(cls, token, uid): 
     return {'token': token} 

    @classmethod 
    def revoke_token_headers(cls, token, uid): 
     return {'Content-type': 'application/json'} 

Но Google по-прежнему запрашивать данные профиля, профиль по-прежнему в сфере:

https://accounts.google.com/o/oauth2/auth?response_type=code&scope=https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile&redirect_uri= ...

работает нормально, если я модифицируют вручную кодом социально-Идент вместо наследования:

def get_scope(self): 
    return ['https://www.googleapis.com/auth/userinfo.email',] 

Что такое случилось с моим кодом?

+0

Вы определили новый бэкэнд в 'AUTHENTICATION_BACKENDS'? – omab

+0

Да, и 'print DEFAULT_SCOPE' outpùt - это новая область, но ... У меня есть еще одна печать в ваш код django-auth, а выходные данные печати включают userinfo.profile. – danihp

+0

Что произойдет, если вы переопределите 'get_scope()' в новом классе? Также удалите другой сервер из той же настройки. – omab

ответ

1

Это потому, что область по умолчанию, используемая для бэкэнд google, установлена ​​на это (информация по электронной почте и профилю), она определена here. Чтобы избежать этого, вы можете создать свой собственный бэкэнд google, который просто устанавливает желаемую область действия, а затем использовать этот бэкэнд вместо встроенного. Пример:

from social_auth.backends.google import GoogleOAuth2 

class SimplerGoogleOAuth2(GoogleOAuth2): 
    DEFAULT_SCOPE = ['https://www.googleapis.com/auth/userinfo.email'] 
Смежные вопросы