2014-02-23 1 views
14

나는 python-social-auth을 django에 구현하려고합니다.facebook으로 python social auth를 가진 사용자 이메일을 얻고 그것을 저장하는 방법

사용자가 facebook을 통해 인증하고 이메일을 저장하길 원합니다.

사용자를 인증 할 수 있지만 이메일에 대한 확장 된 권한이 Facebook 인증 상자에 표시되지 않고 이메일을 데이터베이스에 저장하지 않습니다. settings.py에서

나는 때라도 한 :

SOCIAL_AUTH_FACEBOOK_KEY='xxx' 
SOCIAL_AUTH_FACEBOOK_SECRET='xxx' 
FACEBOOK_EXTENDED_PERMISSIONS = ['email'] 

AUTHENTICATION_BACKENDS = (
    'social.backends.facebook.FacebookOAuth2', 
    'social.backends.email.EmailAuth', 
    'django.contrib.auth.backends.ModelBackend', 
) 

LOGIN_URL = '/login/' 
LOGIN_REDIRECT_URL = '/done/' 
LOGOUT_REDIRECT_URL = '/' 
URL_PATH = '' 
SOCIAL_AUTH_STRATEGY = 'social.strategies.django_strategy.DjangoStrategy' 
SOCIAL_AUTH_STORAGE = 'social.apps.django_app.default.models.DjangoStorage' 

SOCIAL_AUTH_PIPELINE = (
    'social.pipeline.social_auth.social_details', 
    'social.pipeline.social_auth.social_uid', 
    'social.pipeline.social_auth.auth_allowed', 
    'social.pipeline.social_auth.social_user', 
    'social.pipeline.user.get_username', 
    'social.pipeline.social_auth.associate_by_email', 
    # 'users.pipeline.require_email', 
    'social.pipeline.mail.mail_validation', 
    'social.pipeline.user.create_user', 
    'social.pipeline.social_auth.associate_user', 
    'social.pipeline.social_auth.load_extra_data', 
    'social.pipeline.user.user_details' 
) 

페이스 북 대화 상자 ...

enter image description here

가 어떻게이 문제를 해결할 수 있습니까?

답변

0

페이스 북 로그인 API의 일부 내용을 변경 한 후 당신의 settings.py 파일

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email'] 
40

이 추가 - 페이스 북의 그래프 API의 V2.4 이메일을 가져 오려면이 줄을 추가해야합니다.

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email'] 
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = { 
    'fields': 'id,name,email', 
} 
+2

이것은 올바른 대답입니다! –

+1

넵 .. EXTRA_PARAMS도 필요합니다. – sureshvv

+0

완벽합니다. 다시 로그인하면 내 DB에있는 사용자가 업데이트됩니다. –